Python實現(xiàn)讀取、修改和計算 Excel 公式的示例詳解
Excel 公式在計算、數(shù)據(jù)統(tǒng)計和自動化處理時非常重要。如果在操作 Excel 文件時,能用程序來讀取、修改和計算公式,不僅能節(jié)省大量時間,還能保證計算結(jié)果準(zhǔn)確,避免人工操作帶來的錯誤。
這篇文章將詳細(xì)介紹如何使用 Python 處理 Excel 公式:從創(chuàng)建帶公式的Excel文件、到讀取已有公式,再到修改公式并計算結(jié)果,幫助你全面掌握 Excel 與 Python 的結(jié)合應(yīng)用。
處理 Excel 公式的 Python 庫
要在 Python 中操作 Excel 公式,需要一個能夠完整處理公式讀寫和計算的庫。雖然 openpyxl 等開源庫可以完成基礎(chǔ)的公式寫入和讀取,但其對復(fù)雜函數(shù)的支持有限,且無法在 Python 內(nèi)部直接計算公式結(jié)果。
這篇文章將使用 Free Spire.XLS for Python 庫演示如何以編程方式處理Excel公式。它是一個免費的 Python Excel 庫,支持包括 .xls、.xlsx、.xlsm, .xlsb, .ods, .et 在內(nèi)的多種文件格式,并內(nèi)置計算引擎,可直接在 Python 中完成數(shù)百種 Excel 函數(shù)的計算,無需依賴 Microsoft Excel。
安裝方式
在終端中運行以下命令,從 PyPI 安裝 Free Spire.XLS for Python:
pip install spire.xls.free
安裝完成后,在 Python 腳本中導(dǎo)入庫以訪問該庫的類和方法:
from spire.xls import *
步驟 1:使用 Python 生成帶公式的 Excel 文件
為了演示如何在 Python 中讀取、修改和計算 Excel 公式,我們先創(chuàng)建一個包含真實數(shù)據(jù)的 Excel 工作簿。這個工作簿里包含產(chǎn)品信息、數(shù)量、單價、折扣,以及一些常用公式,比如算術(shù)運算、SUM 和 AVERAGE。
通過程序生成Excel 文件,你可以直接運行示例,清楚看到公式的計算結(jié)果,而無需手動準(zhǔn)備數(shù)據(jù)。
實現(xiàn)代碼如下:
from spire.xls import *
# 創(chuàng)建新工作簿
workbook = Workbook()
# 獲取第一個工作表
sheet = workbook.Worksheets[0]
sheet.Name = "銷售數(shù)據(jù)" # 設(shè)置工作表名稱
# 添加表頭并設(shè)置樣式
headers = ["產(chǎn)品", "數(shù)量", "單價", "折扣 (%)", "小計", "折后總價"]
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è)置對齊方式
data = [
("鍵盤", 10, 25, 5, "", ""),
("鼠標(biāo)", 15, 12, 0, "", ""),
("顯示器", 8, 150, 10, "", "需檢查"),
("USB 數(shù)據(jù)線", 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
# 添加計算公式
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)"
# 添加總計和平均值
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)"
# 高亮顯示總計和平均值
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)
# 計算所有公式
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()運行以上代碼,得到一個包含公式的 Excel 文件,如下圖所示:

步驟 2:使用 Python 讀取 Excel 公式
當(dāng)你收到別人制作的 Excel 文件,想確認(rèn)公式是否正確或覆蓋了所有計算邏輯時,就需要讀取這些公式。
你可以遍歷工作表的已用單元格,通過 HasFormula 屬性判斷哪些單元格包含公式。對于每個含有公式的單元格,使用 Formula 屬性獲取公式,再通過 FormulaValue 屬性獲取公式的計算結(jié)果。這樣,就能清楚地了解 Excel 中各個公式的實際計算情況。
實現(xiàn)代碼如下:
from spire.xls import *
# 創(chuàng)建工作簿對象
workbook = Workbook()
# 加載現(xiàn)有 Excel 文件
workbook.LoadFromFile("公式.xlsx")
# 獲取第一個工作表
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"計算結(jié)果: {cell.FormulaValue}")
# 釋放工作簿資源
workbook.Dispose()輸出結(jié)果與示例 Excel 文件中各公式及其計算結(jié)果一致:

步驟 3:在 Python 中修改和計算 Excel 公式
如果需要更新現(xiàn)有公式,只需要將新的公式表達(dá)式賦值給相應(yīng)單元格的Formula屬性。修改完成后,需要調(diào)用 CalculateAllValue() 方法重新計算工作表中的公式,這樣可以確保所有計算結(jié)果都是最新且準(zhǔn)確的。
實現(xiàn)代碼如下:
from spire.xls import *
# 加載現(xiàn)有工作簿
workbook = Workbook()
workbook.LoadFromFile("公式.xlsx")
# 訪問第一個工作表
sheet = workbook.Worksheets[0]
# 更新現(xiàn)有數(shù)據(jù)
sheet.Range["C2"].NumberValue = 27 # 修改鍵盤單價
sheet.Range["D4"].NumberValue = 12 # 修改顯示器折扣
# 修改現(xiàn)有公式
sheet.Range["F6"].Formula = "=E6*(1-D6/100)+5" # 筆記本包增加額外費用
# 添加新公式
sheet.Range["G2"].Formula = "=C2*B2*0.1" # 示例:小計的 10% 傭金
# 在工作表級別重新計算所有公式
sheet.CalculateAllValue()
print("=== 更新公式 ===")
# 獲取并打印更新后的值
print(f"鍵盤折后總價 (F2): {sheet.Range['F2'].FormulaValue}")
print(f"顯示器折后總價 (F4): {sheet.Range['F4'].FormulaValue}")
print(f"筆記本包折后總價(含額外費用)(F6): {sheet.Range['F6'].FormulaValue}")
print(f"新增傭金 (G2): {sheet.Range['G2'].FormulaValue}")
# 保存更新后的工作簿
workbook.SaveToFile("更新公式.xlsx", ExcelVersion.Version2016)
workbook.Dispose()代碼說明:
- NumberValue – 更新單元格中的數(shù)值。
- Formula – 讀取或為單元格設(shè)置公式。
- CalculateAllValue() – 重新計算公式,可在以下對象上調(diào)用:
- CellRange – 僅計算該單元格(依賴單元格不更新)。
- Worksheet – 計算當(dāng)前工作表中所有公式。
- Workbook – 計算工作簿中所有工作表的公式。
- FormulaValue – 獲取公式的計算結(jié)果。
為了確保準(zhǔn)確性,推薦在工作表或工作簿級別進行計算,因為單個單元格重新計算不會自動更新依賴公式。
附加:Free Spire.XLS for Python 與 openpyxl 公式處理比較
在 Python 中處理 Excel 公式時,應(yīng)選擇既支持讀取又能準(zhǔn)確計算公式的庫。以下是 Free Spire.XLS for Python 與 openpyxl 的對比:
| 特性 | Free Spire.XLS for Python | openpyxl |
| 公式支持 | 支持廣泛的算術(shù)、邏輯、文本、日期、財務(wù)函數(shù)及復(fù)雜表達(dá)式 | 僅支持寫入公式 |
| 公式計算 | 內(nèi)置計算引擎,可直接計算,無需 Excel | 無內(nèi)部計算,需要 Excel 或第三方計算 |
| 文件格式兼容 | 支持 .xls, .xlsx, .xlsm, .xlsb,保持公式完整性 | 僅支持 .xlsx, .xlsm,不支持舊版 .xls |
| 跨平臺 | Windows、macOS、Linux | 純 Python,輕量跨平臺 |
綜上,如果需要在 Python 中完整操作 Excel 公式并進行自動計算,F(xiàn)ree Spire.XLS for Python 是更全面的選擇。
到此這篇關(guān)于Python實現(xiàn)讀取、修改和計算 Excel 公式的示例詳解的文章就介紹到這了,更多相關(guān)Python操作Excel公式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PyCharm新建項目時如何配置項目的Python解釋器詳解
在PyCharm中配置Python環(huán)境是開發(fā)者日常工作中的一項重要任務(wù),尤其當(dāng)接手已有項目時,這篇文章主要給大家介紹了關(guān)于PyCharm新建項目時如何配置項目的Python解釋器的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-06-06
Python Opencv提取圖片中某種顏色組成的圖形的方法
這篇文章主要介紹了Python Opencv提取圖片中某種顏色組成的圖形的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
基于python框架Scrapy爬取自己的博客內(nèi)容過程詳解
這篇文章主要介紹了基于python框架Scrapy爬取自己的博客內(nèi)容過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-08-08
Python?FastAPI?Sanic?Tornado?與Golang?Gin性能實戰(zhàn)對比
本文將深入比較Python的FastAPI、Sanic、Tornado以及Golang的Gin框架的各種特性、性能表現(xiàn)以及適用場景,通過詳實的性能測試和實際示例代碼,將探討它們在構(gòu)建現(xiàn)代高性能應(yīng)用中的優(yōu)劣勢,以便開發(fā)者根據(jù)需求做出明智的選擇2024-01-01

