为什么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?
答案 0 :(得分:3)
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 问题一样,结果证明这是一个格式问题。我将单元格的格式设置为“会计”而不是“数字”。将其更改为数字后,它起作用了。