openpyxl.load_workbook(file,data_only = True不起作用?

时间:2016-02-28 11:28:45

标签: python excel openpyxl

为什么x =“None”而不是“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?

5 个答案:

答案 0 :(得分:3)

来自documentation

  

openpyxl永远不会评估公式

答案 1 :(得分:0)

文档说:

  

data_only控制具有公式的单元格是否具有公式   (默认值)或Excel上次读取工作表时存储的值。

因此,如果您没有使用Excel打开.xlsx文件(writeFormula.xlsx)一次,那么Excel将无法存储任何数据。因此,您的程序将返回NoneType值。 如果您希望程序返回' 500',则应手动打开“writeFormula.xlsx'”。然后,注释程序的文件创建部分。你会得到500'。

我已经尝试过了。它有效。告诉我你是否有不同的意见。感谢。

答案 2 :(得分:0)

我只是有同样的问题。解决方案是手动打开xlsx文件并关闭它,然后单击“保存”。完成此操作后,您可以尝试wbDataonly编程部分并获取数据500

答案 3 :(得分:0)

有是启动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)

答案 4 :(得分:0)

检查 Excel 中单元格的格式。

我也遇到了这个问题。 The documentation 表示您必须通过 Excel 应用程序打开工作簿并重新保存它,然后该值将作为最后计算的值返回。比如

我这样做了,但我仍然得到“无”作为我的回报。

与许多 excel/vba 问题一样,结果证明这是一个格式问题。我将单元格的格式设置为“会计”而不是“数字”。将其更改为数字后,它起作用了。