2017-05-08 9 views
1

openpyxlを使って内部セルを参照する方程式(参照は同じワークシート上のセルと他のワークシート上のセルの両方にある)からデータを読み取ろうとしていますが、方程式から値を読み取ろうとすると、値は 'None'です。最初にワークブックを開くと、リンクの更新に関するメッセージボックスが表示されます。キャンセルしてワークブックを保存すると、式で値を読み取ることができます。私は手動ですべてのワークブックを開き、それを保存したくありません。 openpyxlがワークブックを読み込むときに、内部参照の式が正しく評価されるようにする方法はありますか?ここでopenpyxlを使って方程式リンクを更新するには?

は、私はワークブックをロードする方法である:

 import openpyxl 
    wbPath = [workbookpath] 
    workbook = openpyxl.load_workbook(wbPath, data_only=True) 

*編集:

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とxlwingsパッケージを更新するために、方程式を取得するために使用するコードを追加したいですすべての方程式が再生成され、残りのブックの操作にopenpyxlを使用することができます。

+0

openpyxlは数式を評価しません。 http://openpyxl.readthedocs.io/en/latest/usage.html#using-formulaeこれが必要な場合は、ExcelまたはヘッドレスのLibreOfficeでファイルをポンピングできます。 –

+0

私は実際には、xlwingsを使ってオープンプロセスとクローズプロセスにもう一つステップを追加しました。私は今openpyxlを使用してブックを保存してから、xlwingsでブックを再度開き、保存してブックを閉じます。 – EliSquared

答えて

1

残念ながら、いいえ、openpyxlでこれを行う方法はありません。 openpyxlはすべてExcelファイルから生データを読み取るため、ファイルを開いたり保存したりするときにExcelが計算の「キャッシュされた」バージョンを保存します。 openpyxlはこれを悪用して、最後に計算された時点でそのデータを返すことができますが、式を再計算したり再評価したりしないように "ダム"のままです。

評価するあなたが基本的なパーサを見つけたり書いたりする必要がある数式や、実行時にExcelと対話できるxlwingsのようなものを見たいと思うかもしれません。

+0

ええと、オープンしているファイルは、実際にopenpyxlによって、別のワークブックのワークシート、値、方程式をコピーして、新しい場所に保存することで作成されました。方程式を保存して計算する方法はありますか?同じ問題ですか?また、ファイルを繰り返し、Excelマクロを開いて保存するExcelマクロを作成すると、式が正しく正しく再評価されますか? – EliSquared

+1

はい、絶対にこれがあなたの問題です.Excelはファイルを開けませんでした。プログラムでExcelを開き、それを閉じると解決策になります。同じ問題ですが、openpyxlはExcelの式を解析して計算するのに必要なすべてのロジックを備えていません。 –

+1

ありがとう。私はxlwingsを使って調べるか、別のマクロを作るだけです。 – EliSquared

関連する問題