Python XlsxWriter – 大纲和分组
在Excel中,你可以将具有相同价值的特定列(或行)的行或列进行分组,这样它们就可以通过一个鼠标点击来隐藏或显示。这个功能被称为 大纲和分组。 它有助于显示小计或摘要。这个功能可以在MS excel软件的 数据→大纲 组中找到。
要使用这个功能,数据范围内的所有行必须是按一列的数值排序的。假设我们有不同项目的销售数字。在按项目名称排序后,点击大纲组中的小计选项。下面的对话框会弹出。
工作表显示了按项目划分的销售小计和最后的总金额。在工作表的左边,显示了大纲级别。原始数据在第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层 的减号,工作表上将只保留总计的数据。