欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)讀取、修改和計(jì)算 Excel 公式的示例詳解

 更新時(shí)間:2025年11月08日 10:56:35   作者:SunnyDays1011  
Excel 公式在計(jì)算、數(shù)據(jù)統(tǒng)計(jì)和自動(dòng)化處理時(shí)非常重要,這篇文章將詳細(xì)介紹如何使用 Python 處理 Excel 公式,希望對(duì)大家有一定的幫助

Excel 公式在計(jì)算、數(shù)據(jù)統(tǒng)計(jì)和自動(dòng)化處理時(shí)非常重要。如果在操作 Excel 文件時(shí),能用程序來(lái)讀取、修改和計(jì)算公式,不僅能節(jié)省大量時(shí)間,還能保證計(jì)算結(jié)果準(zhǔn)確,避免人工操作帶來(lái)的錯(cuò)誤。

這篇文章將詳細(xì)介紹如何使用 Python 處理 Excel 公式:從創(chuàng)建帶公式的Excel文件、到讀取已有公式,再到修改公式并計(jì)算結(jié)果,幫助你全面掌握 Excel 與 Python 的結(jié)合應(yīng)用。

處理 Excel 公式的 Python 庫(kù)

要在 Python 中操作 Excel 公式,需要一個(gè)能夠完整處理公式讀寫(xiě)和計(jì)算的庫(kù)。雖然 openpyxl 等開(kāi)源庫(kù)可以完成基礎(chǔ)的公式寫(xiě)入和讀取,但其對(duì)復(fù)雜函數(shù)的支持有限,且無(wú)法在 Python 內(nèi)部直接計(jì)算公式結(jié)果。

這篇文章將使用 Free Spire.XLS for Python 庫(kù)演示如何以編程方式處理Excel公式。它是一個(gè)免費(fèi)的 Python Excel 庫(kù),支持包括 .xls、.xlsx、.xlsm, .xlsb, .ods, .et 在內(nèi)的多種文件格式,并內(nèi)置計(jì)算引擎,可直接在 Python 中完成數(shù)百種 Excel 函數(shù)的計(jì)算,無(wú)需依賴(lài) Microsoft Excel。

安裝方式

在終端中運(yùn)行以下命令,從 PyPI 安裝 Free Spire.XLS for Python:

pip install spire.xls.free

安裝完成后,在 Python 腳本中導(dǎo)入庫(kù)以訪(fǎng)問(wèn)該庫(kù)的類(lèi)和方法:

from spire.xls import *

步驟 1:使用 Python 生成帶公式的 Excel 文件

為了演示如何在 Python 中讀取、修改和計(jì)算 Excel 公式,我們先創(chuàng)建一個(gè)包含真實(shí)數(shù)據(jù)的 Excel 工作簿。這個(gè)工作簿里包含產(chǎn)品信息、數(shù)量、單價(jià)、折扣,以及一些常用公式,比如算術(shù)運(yùn)算、SUM 和 AVERAGE。

通過(guò)程序生成Excel 文件,你可以直接運(yùn)行示例,清楚看到公式的計(jì)算結(jié)果,而無(wú)需手動(dòng)準(zhǔn)備數(shù)據(jù)。

實(shí)現(xiàn)代碼如下:

from spire.xls import *

# 創(chuàng)建新工作簿
workbook = Workbook()

# 獲取第一個(gè)工作表
sheet = workbook.Worksheets[0]
sheet.Name = "銷(xiāo)售數(shù)據(jù)"  # 設(shè)置工作表名稱(chēng)

# 添加表頭并設(shè)置樣式
headers = ["產(chǎn)品", "數(shù)量", "單價(jià)", "折扣 (%)", "小計(jì)", "折后總價(jià)"]
for col, header in enumerate(headers, start=1):
    cell = sheet.Range[1, col]                      
    cell.Text = header                               
    cell.Style.Font.IsBold = True                    
    cell.Style.HorizontalAlignment = HorizontalAlignType.Center  
    cell.Style.Color = Color.FromRgb(200, 200, 250)  

# 添加示例數(shù)據(jù)并設(shè)置對(duì)齊方式
data = [
    ("鍵盤(pán)", 10, 25, 5, "", ""),
    ("鼠標(biāo)", 15, 12, 0, "", ""),
    ("顯示器", 8, 150, 10, "", "需檢查"),
    ("USB 數(shù)據(jù)線(xiàn)", 20, 5, 0, "", ""),
    ("筆記本包", 5, 40, 15, "", "")
]

for row, row_data in enumerate(data, start=2):
    for col, value in enumerate(row_data, start=1):
        cell = sheet.Range[row, col]
        if isinstance(value, (int, float)):
            cell.NumberValue = value                    
            if col > 1:                                
                cell.Style.HorizontalAlignment = HorizontalAlignType.Right
        else:
            cell.Text = value                            
            cell.Style.HorizontalAlignment = HorizontalAlignType.Left  

# 添加計(jì)算公式
for i in range(2, 7):
    sheet.Range[f"E{i}"].Formula = f"=B{i}*C{i}"          
    sheet.Range[f"F{i}"].Formula = f"=E{i}*(1-D{i}/100)" 

# 添加總計(jì)和平均值
sheet.Range["E7"].Formula = "=SUM(E2:E6)"
sheet.Range["F7"].Formula = "=SUM(F2:F6)"
sheet.Range["E8"].Formula = "=AVERAGE(E2:E6)"
sheet.Range["F8"].Formula = "=AVERAGE(F2:F6)"

# 高亮顯示總計(jì)和平均值
for cell_address in ["E7", "F7", "E8", "F8"]:
    cell = sheet.Range[cell_address]
    cell.Style.Font.IsBold = True
    cell.Style.Color = Color.FromRgb(220, 230, 241)

# 計(jì)算所有公式
sheet.CalculateAllValue()

# 設(shè)置所有行高
for row in range(1, sheet.LastRow + 1):
    sheet.Rows[row - 1].RowHeight = 15  

# 設(shè)置所有列寬
for col in range(1, sheet.LastColumn + 1):
    sheet.Columns[col - 1].ColumnWidth = 10 

# 保存工作簿
workbook.SaveToFile("公式.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

運(yùn)行以上代碼,得到一個(gè)包含公式的 Excel 文件,如下圖所示:

步驟 2:使用 Python 讀取 Excel 公式

當(dāng)你收到別人制作的 Excel 文件,想確認(rèn)公式是否正確或覆蓋了所有計(jì)算邏輯時(shí),就需要讀取這些公式。

你可以遍歷工作表的已用單元格,通過(guò) HasFormula 屬性判斷哪些單元格包含公式。對(duì)于每個(gè)含有公式的單元格,使用 Formula 屬性獲取公式,再通過(guò) FormulaValue 屬性獲取公式的計(jì)算結(jié)果。這樣,就能清楚地了解 Excel 中各個(gè)公式的實(shí)際計(jì)算情況。

實(shí)現(xiàn)代碼如下:

from spire.xls import *

# 創(chuàng)建工作簿對(duì)象
workbook = Workbook()

# 加載現(xiàn)有 Excel 文件
workbook.LoadFromFile("公式.xlsx")

# 獲取第一個(gè)工作表
sheet = workbook.Worksheets[0]

# 獲取工作表中已用的單元格范圍
usedRange = sheet.AllocatedRange

print("=== 讀取現(xiàn)有公式 ===")

# 遍歷已用范圍內(nèi)的所有單元格
for cell in usedRange:
    if cell.HasFormula:
        print(f"單元格 {cell.RangeAddressLocal} 公式: {cell.Formula}")
        print(f"計(jì)算結(jié)果: {cell.FormulaValue}")

# 釋放工作簿資源
workbook.Dispose()

輸出結(jié)果與示例 Excel 文件中各公式及其計(jì)算結(jié)果一致:

步驟 3:在 Python 中修改和計(jì)算 Excel 公式

如果需要更新現(xiàn)有公式,只需要將新的公式表達(dá)式賦值給相應(yīng)單元格的Formula屬性。修改完成后,需要調(diào)用 CalculateAllValue() 方法重新計(jì)算工作表中的公式,這樣可以確保所有計(jì)算結(jié)果都是最新且準(zhǔn)確的。

實(shí)現(xiàn)代碼如下:

from spire.xls import *

# 加載現(xiàn)有工作簿
workbook = Workbook()
workbook.LoadFromFile("公式.xlsx")

# 訪(fǎng)問(wèn)第一個(gè)工作表
sheet = workbook.Worksheets[0]

# 更新現(xiàn)有數(shù)據(jù)
sheet.Range["C2"].NumberValue = 27   # 修改鍵盤(pán)單價(jià)
sheet.Range["D4"].NumberValue = 12   # 修改顯示器折扣

# 修改現(xiàn)有公式
sheet.Range["F6"].Formula = "=E6*(1-D6/100)+5"  # 筆記本包增加額外費(fèi)用

# 添加新公式
sheet.Range["G2"].Formula = "=C2*B2*0.1"  # 示例:小計(jì)的 10% 傭金

# 在工作表級(jí)別重新計(jì)算所有公式
sheet.CalculateAllValue()  

print("=== 更新公式 ===")

# 獲取并打印更新后的值
print(f"鍵盤(pán)折后總價(jià) (F2): {sheet.Range['F2'].FormulaValue}")
print(f"顯示器折后總價(jià) (F4): {sheet.Range['F4'].FormulaValue}")
print(f"筆記本包折后總價(jià)(含額外費(fèi)用)(F6): {sheet.Range['F6'].FormulaValue}")
print(f"新增傭金 (G2): {sheet.Range['G2'].FormulaValue}")

# 保存更新后的工作簿
workbook.SaveToFile("更新公式.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

代碼說(shuō)明:

  • NumberValue – 更新單元格中的數(shù)值。
  • Formula – 讀取或?yàn)閱卧裨O(shè)置公式。
  • CalculateAllValue() – 重新計(jì)算公式,可在以下對(duì)象上調(diào)用:
    • CellRange – 僅計(jì)算該單元格(依賴(lài)單元格不更新)。
    • Worksheet – 計(jì)算當(dāng)前工作表中所有公式。
    • Workbook – 計(jì)算工作簿中所有工作表的公式。
  • FormulaValue – 獲取公式的計(jì)算結(jié)果。

為了確保準(zhǔn)確性,推薦在工作表或工作簿級(jí)別進(jìn)行計(jì)算,因?yàn)閱蝹€(gè)單元格重新計(jì)算不會(huì)自動(dòng)更新依賴(lài)公式。

附加:Free Spire.XLS for Python 與 openpyxl 公式處理比較

在 Python 中處理 Excel 公式時(shí),應(yīng)選擇既支持讀取又能準(zhǔn)確計(jì)算公式的庫(kù)。以下是 Free Spire.XLS for Python 與 openpyxl 的對(duì)比:

特性Free Spire.XLS for Pythonopenpyxl
公式支持支持廣泛的算術(shù)、邏輯、文本、日期、財(cái)務(wù)函數(shù)及復(fù)雜表達(dá)式僅支持寫(xiě)入公式
公式計(jì)算內(nèi)置計(jì)算引擎,可直接計(jì)算,無(wú)需 Excel無(wú)內(nèi)部計(jì)算,需要 Excel 或第三方計(jì)算
文件格式兼容支持 .xls, .xlsx, .xlsm, .xlsb,保持公式完整性僅支持 .xlsx, .xlsm,不支持舊版 .xls
跨平臺(tái)Windows、macOS、Linux純 Python,輕量跨平臺(tái)

綜上,如果需要在 Python 中完整操作 Excel 公式并進(jìn)行自動(dòng)計(jì)算,F(xiàn)ree Spire.XLS for Python 是更全面的選擇。

到此這篇關(guān)于Python實(shí)現(xiàn)讀取、修改和計(jì)算 Excel 公式的示例詳解的文章就介紹到這了,更多相關(guān)Python操作Excel公式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python將圖片轉(zhuǎn)為矢量圖的方法步驟

    python將圖片轉(zhuǎn)為矢量圖的方法步驟

    這篇文章主要介紹了python將圖片轉(zhuǎn)為矢量圖的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 完美解決python針對(duì)hdfs上傳和下載的問(wèn)題

    完美解決python針對(duì)hdfs上傳和下載的問(wèn)題

    這篇文章主要介紹了完美解決python針對(duì)hdfs上傳和下載的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • Python Selenium中等待設(shè)置的實(shí)現(xiàn)

    Python Selenium中等待設(shè)置的實(shí)現(xiàn)

    本文主要介紹了Python Selenium中等待設(shè)置的實(shí)現(xiàn),過(guò)詳實(shí)的示例代碼,深入介紹了顯式等待、隱式等待、自定義等待條件、多重等待條件、頁(yè)面加載狀態(tài)的等待、元素存在與可見(jiàn)性等待、Fluent等待以及異步JavaScript加載的等待,感興趣的可以了解一下
    2023-12-12
  • 詳解Python中defaultdict的具體使用

    詳解Python中defaultdict的具體使用

    defaultdict 是一個(gè)類(lèi)似字典的容器,屬于 collections 模塊, 它是字典的子類(lèi), 因此它具有詞典的所有功能,下面小編就來(lái)和大家詳細(xì)聊聊defaultdict的具體使用吧
    2023-10-10
  • jupyter notebook的安裝與使用詳解

    jupyter notebook的安裝與使用詳解

    這篇文章主要介紹了jupyter notebook的安裝與使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Python繪制時(shí)鐘的示例代碼

    Python繪制時(shí)鐘的示例代碼

    這篇文章主要介紹了如何利用Python和Pygame庫(kù)繪制一個(gè)簡(jiǎn)單的時(shí)鐘效果。文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下
    2022-02-02
  • Python內(nèi)置的HTTP協(xié)議服務(wù)器SimpleHTTPServer使用指南

    Python內(nèi)置的HTTP協(xié)議服務(wù)器SimpleHTTPServer使用指南

    這篇文章主要介紹了Python內(nèi)置的HTTP協(xié)議服務(wù)器SimpleHTTPServer使用指南,SimpleHTTPServer本身的功能十分簡(jiǎn)單,文中介紹了需要的朋友可以參考下
    2016-03-03
  • python提取excel一列或多列數(shù)據(jù)另存為新表代碼實(shí)例

    python提取excel一列或多列數(shù)據(jù)另存為新表代碼實(shí)例

    在日常的工作中,其實(shí)就是用鼠標(biāo)進(jìn)行數(shù)據(jù)篩選,然后選擇你想要這一行數(shù)據(jù)進(jìn)行復(fù)制,下面這篇文章主要給大家介紹了關(guān)于python提取excel一列或多列數(shù)據(jù)另存為新表的相關(guān)資料,需要的朋友可以參考下
    2024-06-06
  • python3環(huán)境搭建過(guò)程(利用Anaconda+pycharm)完整版

    python3環(huán)境搭建過(guò)程(利用Anaconda+pycharm)完整版

    這篇文章主要介紹了python3環(huán)境搭建過(guò)程(利用Anaconda+pycharm)完整版,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 判斷Threading.start新線(xiàn)程是否執(zhí)行完畢的實(shí)例

    判斷Threading.start新線(xiàn)程是否執(zhí)行完畢的實(shí)例

    這篇文章主要介紹了判斷Threading.start新線(xiàn)程是否執(zhí)行完畢的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05

最新評(píng)論