Python XlsxWriter – 大纲和分组

Python XlsxWriter – 大纲和分组

在Excel中,你可以将具有相同价值的特定列(或行)的行或列进行分组,这样它们就可以通过一个鼠标点击来隐藏或显示。这个功能被称为 大纲和分组。 它有助于显示小计或摘要。这个功能可以在MS excel软件的 数据→大纲 组中找到。

要使用这个功能,数据范围内的所有行必须是按一列的数值排序的。假设我们有不同项目的销售数字。在按项目名称排序后,点击大纲组中的小计选项。下面的对话框会弹出。

Python XlsxWriter - 纲要和分组

工作表显示了按项目划分的销售小计和最后的总金额。在工作表的左边,显示了大纲级别。原始数据在第3层,小计在第2层,总计在第1层。

Python XlsxWriter - 纲要和分组

使用大纲和分组的工作

要使用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 。我们可以看到,轮廓显示在左边。

Python XlsxWriter - 纲要和分组

在每一级,减号表示行可以折叠,只有小计行会被显示。

Python XlsxWriter - 纲要和分组

该图显示 第2层 的所有行都被折叠了。现在它的轮廓中显示加号,这意味着数据行可以展开。如果你点击 第1层 的减号,工作表上将只保留总计的数据。

Python XlsxWriter - 纲要和分组

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程