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 Formula

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 Array Formula

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 应用程序打开。

Write Dynamic Array data