現在有一個xlsm檔案,我想讀取里面一個單元格的公式轉化后的值,于是利用了data_only=True方法,之后我要對檔案進行一些修改,save函式之后,再打開檔案,卻發現里面單元格的公式都沒了,都轉化成數字了,請問要怎么保留檔案的公式呀? 求助各位大佬,謝謝!
uj5u.com熱心網友回復:
現在我有一個解決方案,但是比較麻煩。在讀取檔案之前用workbook_ = load_workbook(filename,keep_vba=True,data_only=True),讀取后不save,之后要修改檔案的話,再重新workbook_ = load_workbook(filename,keep_vba=True,data_only=False),修改后再save。但是這樣做比較麻煩,不靈活,請問大佬們有沒有更簡便的方法?uj5u.com熱心網友回復:
再附加一個知識點:(來自網址:https://www.cnblogs.com/vhills/p/8327918.html)當’abc.xlsx’被生成并在Excel程式中打開并保存之后(這個程序Excel會把公式結果計算出來),該檔案附帶有兩套值,一套是公式全都沒有計算的(data_only=False(默認)),一套是公式計算了結果的(data_only=True)。(如果沒有被Excel打開并保存,則只有一套值(data_only=False的那套,公式沒有計算結果的)。
此時,以data_only=True或默認data_only=False打開會得到兩種不同的結果,各自獨立,即data_only=True狀態下打開的,會發現公式結果為None(空值)或者一個計算好的常數,而不會看到它原本的公式是如何。而data_only=False則只會顯示公式而已。因此,data_only=True狀態下打開,如果最后用save()函式保存了,則原xlsx檔案中,公式會被替換為常數結果或空值。而data_only=False狀態下打開,最后用save()函式保存了的話,原xlsx檔案也會只剩下data_only=False的那套值(即公式),另一套(data_only=True)的值會丟失,如想重新獲得兩套值,則仍舊需要用Excel程式打開該檔案并保存。
用openpyxl往excel里面寫入公式后save保存后,再用openpyxl附加data_only=True讀取公式的值,會出現None。解決辦法就是在讀取前自己手動打開檔案,再保存。或者利用下面這個函式,用代碼打開檔案再保存:
from win32com.client import Dispatch
def just_open(filename):
xlApp = Dispatch("Excel.Application")
xlApp.Visible = False
xlBook = xlApp.Workbooks.Open(filename)
xlBook.Save()
xlBook.Close()
uj5u.com熱心網友回復:
我也碰到這個問題這是利用了windows系統里面的微軟的東東去處理了,保存excel檔案以后會有公式和資料兩套東西。
那么linux下面怎么辦?
uj5u.com熱心網友回復:
嗷嗚這個我也不知道,沒在Linux環境下試過
uj5u.com熱心網友回復:
你好解決了嗎?linux
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/243007.html
