Python XlsxWriter - 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_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版引入了动态数组的概念,引入了一些利用动态数组优势的新功能。 这些功能是 −
Sr.No | 函数 & 描述 |
---|---|
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 应用程序打开。