Python XlsxWriter 大纲和分组


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

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

Outline

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

Item And Sales

使用大纲和分组


要使用 XlsxWriter 做到这一点,我们需要使用 设置行() 方法。数据行设置在级别 2。

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

小计的行具有级别 1。

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

We use 小计() 计算并显示一组销售数字的总和的功能。

例子

完整代码如下:

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()

运行代码并打开 你好.xlsx 使用 Excel。如我们所见,轮廓显示在左侧。

Outlines

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

Subtotal Row

该图显示了所有行 level 2 已经倒塌。它现在在大纲中显示加号,这意味着可以扩展数据行。如果你单击减号 level 1 ,只有总计将保留在工作表上。

Grand Total