2017-02-21 13 views
2

openpyxlを使用してファイルを開き、一部のセルを編集して変更を保存します。ここで は例です:openpyxl 2.4.2:保存後に式が空になったセル値

import openpyxl 
    book = openpyxl.load_workbook(sheet_path)  
    sheet = book.active 

    for row in range(sheet.max_row): 
     index = row + 1 
     sheet.cell(row=index, column=1).value = "something" 

    book.save(sheet_path) 

問題は、私は、ファイルを保存するときに、他のセルが変更されている、です。実際には、数式を含むシート内のセルは「破損」し、ファイルサイズは大幅に縮小され、シートを読み取るために他のスクリプトを使用すると、数式を含むセルは空としてレポートされます。しかし、シートを開くと、すべてが正常に表示され、保存するとすべてが修復され、ファイルサイズは正常に戻ります。私は問題がopenpyxlから来ると思います。これによりファイルサイズが小さくなり、実際のセル値を取得するために手動で開く/保存する必要があります。私は使用しているライブラリを完全に変更せずにこの問題を解決する方法は見つけられません。 ご協力いただきありがとうございます。

+0

数式または最後に計算された値のいずれかを使用できますが、両方を使用することはできません。 –

+0

説明してください: "* ...フォーミュラを含むセルは空です。*"と報告されます。これは、ファイルオープン再計算式が実行されるときには当てはまりません。 – stovfl

+0

スクリプトを実行した直後に、私はセルを読み込むjavascriptスクリプトを使用します。私は、このスクリプトはシートがスクリプトによって開かれているので、セルが空であると見なします。私が理解しているように、開かれたときに式を再計算するのは秀でていますが、実際にそれらの値を保持するためにシートを保存する必要があるため、値はスクリプトには見えません。 –

答えて

1

openpyxlが既存の公式を読み書きするとき、計算された値は省略され、新しい公式の値は計算されません。 openpyxlはブックに積荷の数式値を再計算するように指示するフラグを設定します。これは、Excelで見たときにすべてが正常に見える理由です。

+0

これは、考えていることです。明確な答えをお寄せいただきありがとうございます。シートを手動で開いて保存する以外の計算式を再計算する方法を知っていますか? –

+0

Windows上でExcelをインストールしている場合は、COMオートメーションを使用してワークブックを開いて保存できます。あなたが必要とするすべての部分を持っているQ&Aは、http://stackoverflow.com/questions/24899215/how-to-wait-until-excel-calculates-formulas-before-continuing-with-win32comです。答えはb/cの質問のコードが近いが、かなり正しいです。 – cco

+0

ありがとう!これはまさに私が必要としていたものです。あなたはちょうど私に時間のトンを救った:) –

関連する問題