2017-05-08 25 views
1

我想使用openpyxl從公式中讀取引用內部單元格的數據(引用是同一工作表上的單元格以及其他工作表上的單元格),但是當我嘗試從等式中讀取值時, 'None'的值。如果我先打開工作簿,則會收到有關更新鏈接的消息框。如果我點擊取消然後保存工作簿,我可以用方程式讀取值。我不想手動打開每個工作簿並保存它。有沒有辦法讓openpyxl在加載工作簿時正確評估內部引用的公式?如何使用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進行其餘的工作簿操作。

+0

該文檔非常清晰:openpyxl不評估公式。 http://openpyxl.readthedocs.io/en/latest/usage.html#using-formulae如果你需要這個,那麼你可以通過Excel或無頭LibreOffice泵文件。 –

+0

我實際上剛剛結束了使用xlwings添加一個步驟到打開和關閉過程。我現在使用openpyxl保存我的工作簿,然後用xlwings重新打開工作簿,保存它,然後關閉工作簿。 – EliSquared

回答

1

不幸的是,沒有辦法做到這一點與openpyxl。所有的openpyxl does都是從excel文件中讀取原始數據,並且在文件打開/保存時Excel會保存一個「緩存」版本的計算。 openpyxl可以利用這一點,並返回該數據的最後一次計算,但它保持「啞」的方式,它不重新計算或重新評估公式等。

如果你想評估你必須找到或編寫一個基本的解析器,或者你可能想看看xlwings這些可以在運行時與Excel交互的東西。

+0

嗯,所以我打開的文件實際上是由openpyxl通過複製另一個工作簿中的工作表,值和方程,然後將工作簿保存到新位置而創建的。無論如何計算方程保存或是同樣的問題?另外,如果我的工作是創建一個遍歷文件的Excel宏,打開它們然後保存它們,那麼這將正確地重新評估方程式嗎? – EliSquared

+1

是的,絕對是你的問題,Excel永遠不會打開這些文件。以編程方式打開Excel並關閉它將是一個解決方案。這是同樣的問題,openpyxl根本沒有配備解析和計算Excel公式所需的所有邏輯。 –

+1

好的謝謝。我將不得不考慮使用xlwings或只是製作一個單獨的宏。 – EliSquared