如何使用 openpyxl 更新方程式链接?
How to update equation links using openpyxl?
我正在尝试使用 openpyxl 从引用内部单元格的方程式中读取数据(这些引用既是对同一工作表上的单元格的引用,也是对其他工作表上的单元格的引用)使用 openpyxl,但是当我尝试从方程式中读取值时我得到 'None' 的值。如果我先打开工作簿,我会看到一个关于更新链接的消息框。如果我点击取消然后保存工作簿,我可以用方程式读取值。我不想手动打开每个工作簿并保存它。当 openpyxl 加载工作簿时,有没有办法让内部参考的方程得到正确的评估?
这是我加载工作簿的方式:
import openpyxl
wbPath = [workbookpath]
workbook = openpyxl.load_workbook(wbPath, data_only=True)
*编辑:只是想添加我用来获取方程式以使用 openpyxl 和 xlwings 包更新的代码:
import xlwings as xw
import openpyxl
#Open and save workbook with openpyxl
wbPath = [WorkbookPath]
wb = openpyxl.load_workbook(wbPath)
wb.save(wbPath)
#Use xlwings to open and compute equations
wb = xw.Book(wbPath)
app = xw.apps.active
wb.save(wbPath)
app.quit()
这将导致重新生成所有方程式,并且仍然允许您使用 openpyxl 进行其余的工作簿操作。
很遗憾,没有,openpyxl
无法做到这一点。 openpyxl
所做的只是从 excel 文件中读取原始数据,碰巧当文件为 [=21] 时 Excel 将保存计算的 "cached" 版本=]. openpyxl
可以利用这个和 return 上次计算时的数据,但它保持 "dumb" 的方式是它不会重新计算或重新评估公式等.
如果你想评估公式,你必须找到或编写一个基本的解析器,或者你可能想看看像 xlwings
这样的东西,它可以在运行时与 Excel 交互。
我正在尝试使用 openpyxl 从引用内部单元格的方程式中读取数据(这些引用既是对同一工作表上的单元格的引用,也是对其他工作表上的单元格的引用)使用 openpyxl,但是当我尝试从方程式中读取值时我得到 'None' 的值。如果我先打开工作簿,我会看到一个关于更新链接的消息框。如果我点击取消然后保存工作簿,我可以用方程式读取值。我不想手动打开每个工作簿并保存它。当 openpyxl 加载工作簿时,有没有办法让内部参考的方程得到正确的评估?
这是我加载工作簿的方式:
import openpyxl
wbPath = [workbookpath]
workbook = openpyxl.load_workbook(wbPath, data_only=True)
*编辑:只是想添加我用来获取方程式以使用 openpyxl 和 xlwings 包更新的代码:
import xlwings as xw
import openpyxl
#Open and save workbook with openpyxl
wbPath = [WorkbookPath]
wb = openpyxl.load_workbook(wbPath)
wb.save(wbPath)
#Use xlwings to open and compute equations
wb = xw.Book(wbPath)
app = xw.apps.active
wb.save(wbPath)
app.quit()
这将导致重新生成所有方程式,并且仍然允许您使用 openpyxl 进行其余的工作簿操作。
很遗憾,没有,openpyxl
无法做到这一点。 openpyxl
所做的只是从 excel 文件中读取原始数据,碰巧当文件为 [=21] 时 Excel 将保存计算的 "cached" 版本=]. openpyxl
可以利用这个和 return 上次计算时的数据,但它保持 "dumb" 的方式是它不会重新计算或重新评估公式等.
如果你想评估公式,你必须找到或编写一个基本的解析器,或者你可能想看看像 xlwings
这样的东西,它可以在运行时与 Excel 交互。