Python XlsxWriter 公式和函数
Worksheet 类提供了三种使用公式的方法。
- 写公式()
- write_array_formula()
- write_dynamic_array_formula()
所有这些方法都用于为单元格分配公式和函数。
write_formula() 方法
The 写公式() 方法需要单元格的地址和包含有效 Excel 公式的字符串。在公式字符串中,仅接受 A1 样式的地址表示法。但是,单元格地址参数可以是标准 Excel 类型或基于零的行和列编号表示法。
例子
在下面的示例中,各种语句使用 写公式() 方法。第一个使用标准 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() 方法
The write_array_formula() 方法用于将公式扩展到一个范围。在 Excel 中,数组公式对一组值执行计算。它可能返回单个值或一系列值。
数组公式由公式周围的一对花括号表示: {=总和(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() 方法
The write_dynamic_array_data() 方法将动态数组公式写入单元格区域。 EXCEL的365版本引入了动态数组的概念,并引入了一些利用动态数组优势的新功能。这些功能是:
序号 | 功能与说明 |
---|---|
1 |
FILTER 过滤数据并返回匹配记录 |
2 |
兰德雷 生成随机数数组 |
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 应用程序打开。