Python XlsxWriter - 大纲和分组
在 Excel 中,您可以对具有特定列(或行)相同值的行或列进行分组,以便单击鼠标即可隐藏或显示它们。 此功能称为大纲和分组。 它有助于显示小计或摘要。 此功能可以在 MS excel 软件的 Data→Outline 组中找到。
要使用此功能,数据范围内的所有行都应按照一列中值的排序顺序排列。 假设我们有不同商品的销售数据。 对项目名称的范围进行排序后,单击"Outline"组中的"Subtotal"选项。 弹出如下对话框。
工作表显示按项目分类的销售额小计,最后显示总计。 在工作表的左侧,显示了大纲级别。 原始数据在第 3 层,小计在第 2 层,总计在第 1 层。
使用大纲和分组
要使用 XlsxWriter 执行此操作,我们需要使用 set_row() 方法的级别属性。 数据行设置在级别 2。
ws.set_row(row, None, None, {'level': 2})
subtotal 行的级别为 1。
ws.set_row(row, None, None, {'level': 1})
我们使用SUBTOTAL() 函数来计算并显示一组中的销售额总和。
示例
完整代码如下 −
import xlsxwriter wb = xlsxwriter.Workbook('hello.xlsx') ws = wb.add_worksheet() headings=['Item', 'Sales'] data=[ ['Apple', 45], ['Apple', 84], ['Apple', 125], ['Mango', 32], ['Mango', 65], ['Mango', 90], ['Oranges', 60], ['Oranges', 75], ['Oranges',100], ] ws.write_row('A1', headings) item='Apple' rownum=1 startrow=1 for row in data: if row[0]==item: ws.set_row(rownum, None, None, {'level': 2}) ws.write_row(rownum,0, row) rownum+=1 else: ws.set_row(rownum, None, None, {'level': 1}) ws.write(rownum, 0, item+' Subtotal') cellno='B{}:B{}'.format(startrow,rownum) print (cellno) ws.write(rownum,1,'=SUBTOTAL(9,'+cellno+')') # rownum+=1 item=data[rownum][0] rownum+=1 ws.set_row(rownum, None, None, {'level': 2}) ws.write_row(rownum,0, row) rownum+=1 startrow=rownum else: ws.set_row(rownum, None, None, {'level': 1}) ws.write(rownum, 0, item+' Subtotal') cellno='B{}:B{}'.format(startrow,rownum) ws.write(rownum,1,'=SUBTOTAL(9,'+cellno+')') rownum+=1 ws.write(rownum, 0, 'Grand Total') cellno='B{}:B{}'.format(1,rownum) ws.write(rownum,1,'=SUBTOTAL(9,'+cellno+')') wb.close()
输出
运行代码并使用 Excel 打开 hello.xlsx。 正如我们所见,大纲显示在左侧。
在每个级别,减号表示可以折叠行,只显示小计行。
此图显示级别 2 的所有行都已折叠。 它现在在大纲中显示加号,这意味着可以扩展数据行。 如果您单击级别 1 的减号,工作表上将只保留总计。