我对 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。
尝试在加载工作簿时将“data_only”参数设置为 True。
wb = load_workbook("example.xlsx", data_only=True)
print(sheet['B1'].value)
这将在 B1 单元格计算公式后打印结果。
openpyxl 不会也不会计算公式的结果,因此公式 B1=A1 只会在您打开 excel 工作表或使用将计算它的其他程序时计算。我相信还有其他图书馆可以提供帮助,比如 pycel。
由于以上评论没有完全回答我的问题,我将添加一个链接到另一个补充thread。希望它能帮助其他面临同样问题的人。我没有意识到必须使用 Excel 应用程序打开和保存更新的 excel 文件...
问候,
麦基
对@Jake Morris 回答的反馈:
是的,openpyxl 没有能力 till data 对 excel 文件执行重新计算操作。但是我们仍然可以通过win32com(pywin32)库通过COM对象打开excel文件来解决上述问题,我们可以执行以下操作:
如果您的 excel 文件中启用了自动重新计算,那么您可以跳过第 2 步,只执行第 1 步和第 3 步。
谢谢你的时间
Velton Angelis D'silva