用Python向Excel写入公式

16

我正在思考如何最好地解决以下问题。非常感谢您的任何建议。

示例Excel表格列:

Column A  |  Column B  | Column C
Apple     |  Apple     |
Orange    |  Orange    |
Pear      |  Banana    |

我希望Excel能告诉我列A和B中的项目是否匹配,并在列C中显示结果。 我输入到列C中的公式应该是=IF(A1=B1, "匹配", "不匹配")

在Excel中,我只需将公式拖曳到列C的其余单元格中以应用公式,结果将如下所示:

Column A  |  Column B  | Column C
Apple     |  Apple     | Match
Orange    |  Orange    | Match
Pear      |  Banana    | Mismatch

为了使用Python脚本自动化此过程,我尝试了:

import openpyxl
wb = openpyxl.load_workbook('test.xlsx')
Sheet = wb.get_sheet_by_name('Sheet1')
for cellObj in Sheet.columns[2]:
    cellObj.value = '=IF($A$1=$B$1, "Match", "Mismatch")
wb.save('test.xlsx')

这将在C列中的所有单元格中编写公式,但是该公式仅参考A1和B1单元格,因此导致C列中所有单元格的结果都等于Match。

Column A  |  Column B  | Column C
Apple     |  Apple     | Match
Orange    |  Orange    | Match
Pear      |  Banana    | Match

你会如何处理这个问题?

2个回答

24

你可能希望使公式的创建变得动态化,这样C的每一行都会从AB的相应行中获取:

for i, cellObj in enumerate(Sheet.columns[2], 1):
    cellObj.value = '=IF($A${0}=$B${0}, "Match", "Mismatch")'.format(i)

抱歉重新上传旧帖,但有人提到它,openpyxl是否已更改,或者我错过了什么? - PRMoureu
@PRMoureu 不太确定,但根据链接的帖子,很可能是这样。 - Moses Koledoye

9

现在你可以很容易地在某些记录中进行公式计算。此外,还有一些更简单的函数可供使用,例如:

  1. wb.sheetnames 代替 wb.read_sheet_names()
  2. sheet = wb['SHEET_NAME'] 代替 sheet = wb.get_sheet_by_name('SHEET_NAME')

并且可以通过以下方式轻松插入公式:

sheet['A1'] = '=SUM(1+1)'


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接