Python XlsxWriter - 公式與函式



Worksheet 類提供了三種使用公式的方法。

  • write_formula()
  • write_array_formula()
  • write_dynamic_array_formula()

所有這些方法都用於為單元格分配公式以及函式。

write_formula() 方法

write_formula() 方法需要單元格的地址,以及包含有效 Excel 公式的字串。在公式字串內部,僅接受 A1 樣式地址表示法。但是,單元格地址引數可以是標準 Excel 型別或基於零的行和列號表示法。

示例

在下面的示例中,各種語句使用 write_formula() 方法。第一個使用標準 Excel 表示法分配公式。第二個語句使用行和列號來指定目標單元格的地址,在該單元格中設定公式。在第三個示例中,IF() 函式被分配給 G2 單元格。

import xlsxwriter

wb = xlsxwriter.Workbook('hello.xlsx')
ws = wb.add_worksheet()

data=[
   ['Name', 'Phy', 'Che', 'Maths', 'Total', 'percent', 'Result' ],
   ['Arvind', 50,60,70]
]
ws.write_row('A1', data[0])
ws.write_row('A2', data[1])
ws.write_formula('E2', '=B2+C2+D2')
ws.write_formula(1,5, '=E2*100/300')
ws.write_formula('G2', '=IF(F2>=50, "PASS","FAIL")')

wb.close()

輸出

Excel 檔案顯示以下結果:

Write Formula

write_array_formula() 方法

write_array_formula() 方法用於將公式擴充套件到一個範圍。在 Excel 中,陣列公式對一組值執行計算。它可以返回單個值或一系列值。

陣列公式用公式周圍的一對花括號表示 - {=SUM(A1:B1*A2:B2)}。範圍可以透過範圍中第一個和最後一個單元格的行和列號來指定(例如 0,0, 2,2),也可以透過字串表示形式 'A1:C2' 來指定。

示例

在下面的示例中,陣列公式用於 E、F 和 G 列,以根據 B2:D4 範圍內的分數計算總分、百分比和結果。

import xlsxwriter
wb = xlsxwriter.Workbook('hello.xlsx')
ws = wb.add_worksheet()

data=[
   ['Name', 'Phy', 'Che', 'Maths', 'Total', 'percent', 'Result'],
   ['Arvind', 50,60,70],
   ['Amar', 55,65,75],
   ['Asha', 75,85,80]
]

for row in range(len(data)):
   ws.write_row(row,0, data[row])
   
ws.write_array_formula('E2:E4', '{=B2:B4+C2:C4+D2:D4}')
ws.write_array_formula(1,5,3,5, '{=(E2:E4)*100/300}')
ws.write_array_formula('G2:G4', '{=IF((F2:F4)>=50, "PASS","FAIL")}')

wb.close()

輸出

以下是使用 MS Excel 開啟工作表時的顯示方式:

Write Array Formula

write_dynamic_array_data() 方法

write_dynamic_array_data() 方法將動態陣列公式寫入單元格範圍。動態陣列的概念已在 EXCEL 的 365 版本中引入,並且引入了一些利用動態陣列優勢的新函式。這些函式是:

序號 函式及描述
1

FILTER

篩選資料並返回匹配的記錄

2

RANDARRAY

生成隨機數陣列

3

SEQUENCE

生成一系列數字的陣列

4

SORT

按列排序範圍

5

SORTBY

按另一個範圍或陣列排序範圍

6

UNIQUE

從列表或範圍中提取唯一值

7

XLOOKUP

VLOOKUP 的替代

8

XMATCH

MATCH 函式的替代

動態陣列是返回值範圍,其大小可以根據結果更改。例如,像 FILTER() 這樣的函式返回一個返回值陣列,該陣列的大小根據篩選結果而變化。

示例

在下面的示例中,資料範圍是 A1:D17。篩選器函式使用此範圍,條件範圍是 C1:C17,其中給出了產品名稱。FILTER() 函式導致動態陣列,因為滿足條件的行數可能會發生變化。

import xlsxwriter

wb = xlsxwriter.Workbook('hello.xlsx')
ws = wb.add_worksheet()

data = (
   ['Region', 'SalesRep', 'Product', 'Units'],
   ['East',   'Tom',      'Apple',    6380],
   ['West',   'Fred',     'Grape',    5619],
   ['North',  'Amy',      'Pear',     4565],
   ['South',  'Sal',      'Banana',   5323],
   ['East',   'Fritz',    'Apple',    4394],
   ['West',   'Sravan',   'Grape',    7195],
   ['North',  'Xi',       'Pear',     5231],
   ['South',  'Hector',   'Banana',   2427],
   ['East',   'Tom',      'Banana',   4213],
   ['West',   'Fred',     'Pear',     3239],
   ['North',  'Amy',      'Grape',    6520],
   ['South',  'Sal',      'Apple',    1310],
   ['East',   'Fritz',    'Banana',   6274],
   ['West',   'Sravan',   'Pear',     4894],
   ['North',  'Xi',       'Grape',    7580],
   ['South',  'Hector',   'Apple',    9814])
for row in range(len(data)):
   ws.write_row(row,0, data[row])
   
ws.write_dynamic_array_formula('F1', '=FILTER(A1:D17,C1:C17="Apple")')
wb.close()

輸出

請注意,寫入 write_dynamic_array_formula() 的公式字串不需要包含花括號。生成的 hello.xlsx 必須使用 Excel 365 應用程式開啟。

Write Dynamic Array data
廣告

© . All rights reserved.