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.