2017-02-21 163 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腳本。我認爲這個腳本將這些單元看作是空的,因爲這個表是由一個腳本打開的。據我所知,Excel打開時會重新計算公式,但由於工作表需要保存才能真正保留這些值,因此腳本無法看到這些值。 –

回答

1

當openpyxl讀取和寫入現有公式時,計算值將被省略,並且不會爲新公式計算值。 openpyxl在工作簿中設置一個標誌,告訴excel重新計算加載時的公式值,這就是爲什麼當您用excel查看時一切看起來很正常的原因。

+0

這是一個想法,謝謝你的明確答案。您是否知道一種重新計算手動打開和保存工作表的公式的方法? –

+0

如果您在Windows上運行並安裝了Excel,則可以使用COM自動化功能打開並保存工作簿。一個問題和答案,你需要的所有部分是http://stackoverflow.com/questions/24899215/how-to-wait-until-excel-calculates-formulas-before-continuing-with-win32com - 一定要閱讀回答b/c問題的代碼接近但不完全正確。 – cco

+0

非常感謝!這正是我需要的。你爲我節省了很多時間:) –

相關問題