Python openpyxl data_only = True返回None

Mic*_*ski 7 python excel openpyxl

我有一个简单的Excel文件:A1 = 200 A2 = 300 A3 = = SUM(A1:A2)

此文件在excel中工作并显示SUM的正确值,但在使用openpyxl模块进行python时,我无法在data_only = True模式下获取值

shell中的Python代码:

wb = openpyxl.load_workbook('writeFormula.xlsx', data_only = True)
sheet = wb.active
sheet['A3']
<Cell Sheet.A3> # python response
print(sheet['A3'].value)
None # python response
Run Code Online (Sandbox Code Playgroud)

而:

wb2 = openpyxl.load_workbook('writeFormula.xlsx')
sheet2 = wb2.active
sheet2['A3'].value
'=SUM(A1:A2)'  # python response
Run Code Online (Sandbox Code Playgroud)

有什么建议我在做什么?

Cha*_*ark 12

这取决于文件的来源.data_only=True取决于像Excel这样的应用程序缓存的公式的值.但是,如果文件是由openpyxl或类似的库创建的,则可能从未评估公式,因此,没有缓存值可用,openpyxl将报告None为值.


小智 6

我遇到过同样的问题。这可能不是最优雅的解决方案,但这对我有用:

import xlwings
from openpyxl import load_workbook

excel_app = xlwings.App(visible=False)
excel_book = excel_app.books.open('writeFormula.xlsx')
excel_book.save()
excel_book.close()
excel_app.quit()

workbook = load_workbook(filename='writeFormula.xlsx', data_only=True)
Run Code Online (Sandbox Code Playgroud)


小智 5

我已经用 Openpyxl 和 Python 复制了这个问题。

我目前使用的是 openpyxl 版本 2.6.3 和 Python 3.7.4。另外,我假设您正在尝试完成 Al Sweigart 的 ATBSWP 练习。

考虑到 Excel 确实可以缓存值,我尝试并测试了 Charlie Clark 的答案。我在 Excel 中打开电子表格,将公式复制并粘贴到同一个单元格中,最后保存工作簿。在使用 Openpyxl 并使用 data_only=True 选项在 Python 中重新打开工作簿并读取此单元格的值时,我看到了正确的值 500,而不是错误的值 None 类型。

我希望这有帮助。