excel 加载工作簿(文件,仅数据=True不起作用?

bq3bfh9z  于 2022-11-18  发布在  其他
关注(0)|答案(5)|浏览(174)

为什么x =“无”而不是“500”?我已经尝试了我所知道的一切,并搜索了1个小时的答案...谢谢你的任何帮助!

import openpyxl

wb = openpyxl.Workbook()
sheet = wb.active
sheet["A1"] = 200
sheet["A2"] = 300
sheet["A3"] = "=SUM(A1+A2)"

wb.save("writeFormula.xlsx")

wbFormulas = openpyxl.load_workbook("writeFormula.xlsx")
sheet = wbFormulas.active
print(sheet["A3"].value)

wbDataOnly = openpyxl.load_workbook("writeFormula.xlsx", data_only=True)
sheet = wbDataOnly.active
x = (sheet["A3"].value)
print(x) # None? Should print 500?
ig9co6j1

ig9co6j11#

来自文档
openpyxl从不计算公式

vwkv1x7d

vwkv1x7d2#

文档说明:
data_only控制包含公式的单元格是包含公式(默认)还是包含Excel上次读取工作表时存储的值。
因此,如果您没有使用Excel打开过该.xlsx文件(writeFormula.xlsx),那么Excel将没有任何数据可存储。因此,您的程序将返回一个NoneType值。如果您希望程序返回“500”,则应手动打开“writeFormula. xlsx”。然后,对程序的文件创建部分进行注解。您将得到“500”。
我已经试过了,效果很好。如果你有不同的意见,请告诉我。谢谢。

uyto3xhc

uyto3xhc3#

有一种简单的方法可以启动excel并更新公式值。

示例代码段

import win32com.client as win32

excel = win32.gencache.EnsureDispatch('Excel.Application')
workbook = excel.Workbooks.Open(inputFile)
workbook.Save()
workbook.Close()
excel.Quit()        
    
# And for reading the data back we can use data_only mode as True.
oxl = openpyxl.load_workbook(inputFile,data_only=True)
g0czyy6m

g0czyy6m4#

检查Excel中单元格的格式。
我也遇到了这个问题。The documentation指示您必须通过excel应用程序打开工作簿并重新保存它,然后返回的值将作为上次计算的值。
我这样做了,我仍然得到了“没有”作为我的回报。
和许多Excel/VBA问题一样,原来这是一个格式问题。我将单元格的格式设置为“会计”而不是“数字”。将其更改为数字后,它工作了。

yxyvkwin

yxyvkwin5#

我也有同样的问题,解决方法是手动打开xlsx文件,关闭后点击保存,完成此操作后,可以尝试wbDataonly编程部分,得到数据500

相关问题