小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Python用openpyxl讀取單元格中的公式或讀取公式計算值

 rongq2007 2023-07-18 發(fā)布于廣東

本文參考了CSDN博主「claria029」的文章,原文鏈接:https://blog.csdn.net/claria029/article/details/116486904

Python使用openpyxl讀取帶公式的單元格時,可以選擇讀取公式還是讀取公式計算值。其關(guān)鍵在于打開文件時給出data_only參數(shù),當(dāng)該參數(shù)的值設(shè)為False時,讀取的是單元格中的公式;當(dāng)該參數(shù)的值設(shè)為True時,讀取的是單元格中的公式計算值。當(dāng)省略該參數(shù)時,默認(rèn)為False。

如下兩種打開文件方式,都讀取的是公式:

wb = openpyxl.load_workbook(filename)

wb = openpyxl.load_workbook(filename, data_only=False)

如下打開文件方式,讀取的是公式計算值:

wb = openpyxl.load_workbook(filename, data_only=True)

注意:如果該工作簿是用openpyxl創(chuàng)建的,并且在創(chuàng)建后未曾用Microsoft Excel打開過,那么想要讀取公式計算結(jié)果是無法得到正確結(jié)果的,只會讀出None。

其原因如下:

當(dāng)xlsx表格被生成并在Excel程序中打開并保存之后(這個過程Excel會把公式結(jié)果計算出來),該文件中所有單元格附帶有兩套值,一套是公式全都沒有計算的,一套是公式計算了結(jié)果的。此時,openpyxl以data_only=False打開可以讀取公式,以data_only=True打開可以得到公式計算出的結(jié)果。

如果openpyxl創(chuàng)建的工作簿沒有被Excel打開并保存,則只有data_only=False的一套值,沒有公式計算結(jié)果的那一套值。所以data_only=True讀取會得到None。

另外:如果用openpyxl的data_only=True狀態(tài)打開文件,并且最后用save()函數(shù)保存了后,則xlsx文件中的公式會被替換為計算結(jié)果(即消除了公式)。

而如果用openpyxl的data_only=False狀態(tài)下打開文件,最后用save()函數(shù)保存了的話,原xlsx文件也會只剩下data_only=False的那套值(即公式),另一套(data_only=True)的值會丟失,如想重新獲得兩套值,則仍舊需要手動用Excel程序打開該文件并保存一次。

那么能否不用手動用Excel程序打開就能讀取公式計算結(jié)果呢?可以的!使用win32com自動打開文件并保存一下就好了。代碼如下:

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

補充claria029博主沒有介紹的內(nèi)容:

一、使用Dispatch打開文件時要注意確認(rèn)后臺沒有Excel相關(guān)的進(jìn)程處于開啟的狀態(tài),否則會報錯。

若已有Excel相關(guān)的進(jìn)程時怎么辦。其實,即使已有Excel相關(guān)的進(jìn)程,可以將上述代碼中的Dispatch換成DispatchEx,其他不變,一樣可以運行。DispatchEx相比Dispatch是強制新建進(jìn)程打開文件的,不受原有Excel相關(guān)的進(jìn)程的影響。

二、win32com.client打開文件時并不是以調(diào)用它的py程序所在目錄為默認(rèn)路徑的,因此要用絕對路徑。并且,在win系統(tǒng)中,openpyxl打開文件時,文件路徑寫成r"D:\文檔\text.xlsx"或著"D:/文檔/text.xlsx"都是可以的,但win32com.client必須用r"D:\文檔\text.xlsx"。

三、如果用xlBook.SaveAs(filename)來保存,會彈出是否覆蓋原文件的對話框。如果不想彈出對話框,可以在SaveAs的語句之前加上:

xlApp.DisplayAlerts = 0

這時會直接覆蓋而不彈出確認(rèn)提示。

————————————————

版權(quán)聲明:本文為CSDN博主「zhfak」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/zhfak/article/details/125382349

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多