Python XlsxWriter - 大纲和分组


在 Excel 中,您可以对特定列(或行)具有相同值的行或列进行分组,以便通过单击鼠标即可隐藏或显示它们。此功能称为大纲和分组。它有助于显示小计或摘要。这个功能可以在MS Excel软件的Data→Outline组中找到。

要使用此功能,数据范围中的所有行必须按一列中的值的排序顺序。假设我们有不同商品的销售数据。对项目名称范围进行排序后,单击“大纲”组中的“小计”选项。弹出如下对话框。

大纲

工作表显示按商品分类的销售额小计以及最后的总计。工作表的左侧显示大纲级别。原始数据位于第 3 级,小计位于第 2 级,总计位于第 1 级。

商品及销售

使用大纲和分组

要使用 XlsxWriter 执行此操作,我们需要使用set_row()方法的 level 属性。数据行设置为级别 2。

ws.set_row(row, None, None, {'level': 2})

小计的行的级别为 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 处的减号,则工作表上将仅保留总计。

累计