Python XlsxWriter – 公式和函数
工作表类提供了三种使用公式的方法。
- 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_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_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应用程序打开 。