使用Python将公式写入Excel

spi*_*ily 7 python excel openpyxl

我正在脑力激荡的过程中如何最好地解决以下问题.任何输入都非常感谢.

Excel工作表列示例:

Column A  |  Column B  | Column C
Apple     |  Apple     |
Orange    |  Orange    |
Pear      |  Banana    |
Run Code Online (Sandbox Code Playgroud)

我希望Excel告诉我A列和B列中的项目是否匹配或不匹配,并在C列中显示结果.我在C列中输入的公式将是 =IF(A1=B1, "Match", "Mismatch")

在excel上,我只是将公式拖到C列的其余单元格中,将公式应用于它们,结果如下:

Column A  |  Column B  | Column C
Apple     |  Apple     | Match
Orange    |  Orange    | Match
Pear      |  Banana    | Mismatch
Run Code Online (Sandbox Code Playgroud)

要使用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')
Run Code Online (Sandbox Code Playgroud)

这将公式写入C列中的所有单元格,但公式仅引用了单元格A1和B1,因此导致列C中的所有单元格=匹配.

Column A  |  Column B  | Column C
Apple     |  Apple     | Match
Orange    |  Orange    | Match
Pear      |  Banana    | Match
Run Code Online (Sandbox Code Playgroud)

你会怎么处理这个?

Mos*_*oye 9

您可能希望创建公式动态,因此每行C取自相应的行AB:

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


小智 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)'