Openpyxl 无法读取引用它之前写入的单元格的函数值

问题描述 投票:0回答:4

我对 openpyxl 包有疑问。为了说明这个问题,我准备了一个简单的例子。

我有一个 excel 文件,它只包含

=A1
单元格中的公式
B1
。我想 (1) 将值 123 写入单元格
A1
,(2) 保存工作簿,(3) 再次打开它,(4) 读取单元格
B1
的内容。而不是
123
我得到
None
。您可以在下面找到一个简单的代码,(我希望)它应该按照刚才的描述进行操作。谁能看到我做错了什么?

import openpyxl

# open file and select sheet
wb = openpyxl.load_workbook('example.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')

# write value into cell A1
sheet['A1'].value = 123

# save the file and close it
wb.save('example.xlsx')
wb.close()

# open the file again and select sheet
wb = openpyxl.load_workbook('example.xlsx', data_only=True)
sheet = wb.get_sheet_by_name('Sheet1')

# read value from cell containing referece to cell A1 => why it returns None?
print(sheet['B1'].value)

# close the file
wb.close()

非常感谢,

麦基

PS:我在 Win7 上使用 python 3.5.5、openpyxl 2.5.6 和 MS Office 2013。

python openpyxl
4个回答
2
投票

尝试在加载工作簿时将“data_only”参数设置为 True。

wb = load_workbook("example.xlsx", data_only=True)
print(sheet['B1'].value)

这将在 B1 单元格计算公式后打印结果。


1
投票

openpyxl 不会也不会计算公式的结果,因此公式 B1=A1 只会在您打开 excel 工作表或使用将计算它的其他程序时计算。我相信还有其他图书馆可以提供帮助,比如 pycel。


0
投票

由于以上评论没有完全回答我的问题,我将添加一个链接到另一个补充thread。希望它能帮助其他面临同样问题的人。我没有意识到必须使用 Excel 应用程序打开和保存更新的 excel 文件...

问候,

麦基


0
投票

对@Jake Morris 回答的反馈:

是的,openpyxl 没有能力 till data 对 excel 文件执行重新计算操作。但是我们仍然可以通过win32com(pywin32)库通过COM对象打开excel文件来解决上述问题,我们可以执行以下操作:

  1. 使用 win32com(pywin32) 库打开 excel 文件。
  2. 使用 win32com(pywin32) recalculate 函数执行重新计算操作。
  3. 保存关闭相当 excel文件。

如果您的 excel 文件中启用了自动重新计算,那么您可以跳过第 2 步,只执行第 1 步和第 3 步。

谢谢你的时间
Velton Angelis D'silva

© www.soinside.com 2019 - 2024. All rights reserved.