Python XlsxWriter - 大纲和分组



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

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

Outline

工作表显示项目的销售小计,最后是总计。在工作表的左侧,显示了大纲级别。原始数据位于级别 3,小计位于级别 2,总计位于级别 1。

Item And Sales

使用大纲和分组

要使用 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**。我们可以看到,大纲显示在左侧。

Outlines

在每个级别,减号表示可以折叠行,并且只显示小计行。

Subtotal Row

此图显示所有位于**级别 2**的行都已折叠。现在它显示了大纲中的加号,这意味着可以展开数据行。如果单击**级别 1**处的减号,则工作表上将只剩下总计。

Grand Total
广告
© . All rights reserved.