openpyxl使用-公式

准备工作

1
2
3
4
5
6
7
8
9
from openpyxl.utils import FORMULAE		# 导入包

print(FORMULAE) # frozenset({'ODD', 'VDB', 'RANK', 'LOGEST', 'ISNONTEXT', 'COUNTA'...
print(len(FORMULAE)) # 352

# 判断是否支持某个公式,公式名区分大小写
print("SUM" in FORMULAE) # True
print("PI" in FORMULAE) # True
print("sum" in FORMULAE) # False

使用公式

1
2
3
4
5
6
7
8
9
10
11
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws.append(["价格1", "价格2", "总和", "平均值"])
ws.append([22, 63])
ws.append([11, 88])
ws.append([15, 68])

# 使用公式方法 同 excel中一样
ws["c2"] = "=SUM(A2,B2)" # 求和
ws["d2"] = "=AVERAGE(A2:B2)" # 求平均值

结果:

image-20231104150428060

翻译公式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from openpyxl import Workbook
from openpyxl.formula.translate import Translator

wb = Workbook()
ws = wb.active

ws.append(["价格1", "价格2", "总和", "平均值"])
ws.append([22, 63])
ws.append([11, 88])
ws.append([15, 68])

ws["c2"] = "=SUM(A2,B2)"
ws["d2"] = "=AVERAGE(A2:B2)"
# C3、C4使用上面的C2的求和公式
# 方式一:直接定位
ws["C3"] = Translator(formula="=SUM(A2,B2)", origin="C2").translate_formula("C3")
ws["C4"] = Translator(formula="=SUM(A2,B2)", origin="C2").translate_formula("C4")

# 方式二:使用循环(当需要大量翻译公式的时候,如果需要修改,只需要修改被翻译的单元的公式即可)
# C3、C4使用上面的C2的求和公式
for cell in ws["C3:C4"]:
# ws["C3"] = Translator(formula="=SUM(A2,B2)", origin="C2").translate_formula("C3")
cell[0].value = Translator(formula="=SUM(A2,B2)", origin="C2").translate_formula(cell[0].coordinate)

结果:

image-20231104151141230

Contents
  1. 1. 准备工作
  2. 2. 使用公式
  3. 3. 翻译公式
|