python 處理excel踩過的坑——data_only,公式全部丟失


用openpyxl讀取excel的load_workbook有個data_only參數。

yb_wb = load_workbook(u"D:\\Desktop\\xxx.xlsx", data_only=True)

顧名思義,True時,只讀data,忽略公式。

但是有個情景是——得先保留公式,根據舊公式寫入新公式。然后再讀取值進行操作。也就是說先data_only = False,然后再data_only = True。

這樣會導致讀取值操作的時候,公式全部沒有了。對,全部為空。就是這么奇怪。

 

谷歌,百度后得知:

wb = openpyxl.load_workbook(‘abc.xlsx’, data_only=True)

 

當’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程序打開該文件並保存。

參考——http://blog.51cto.com/antidarkness/1974684

解決方法:

重新打開一次,保存。

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()

 

先調用win32com打開一次,就OK,原公式就會變成值,后面就可以愉快的操作了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM