乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

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

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

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

      如下兩種打開(kāi)文件方式,都讀取的是公式:

      wb = openpyxl.load_workbook(filename)

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

      如下打開(kāi)文件方式,讀取的是公式計(jì)算值:

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

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

      其原因如下:

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

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

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

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

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

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

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

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

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

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

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

      xlApp.DisplayAlerts = 0

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

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

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

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

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

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶(hù) 評(píng)論公約

        類(lèi)似文章 更多