Python實現讀取、修改和計算 Excel 公式的示例詳解
Excel 公式在計算、數據統(tǒng)計和自動化處理時非常重要。如果在操作 Excel 文件時,能用程序來讀取、修改和計算公式,不僅能節(jié)省大量時間,還能保證計算結果準確,避免人工操作帶來的錯誤。
這篇文章將詳細介紹如何使用 Python 處理 Excel 公式:從創(chuàng)建帶公式的Excel文件、到讀取已有公式,再到修改公式并計算結果,幫助你全面掌握 Excel 與 Python 的結合應用。
處理 Excel 公式的 Python 庫
要在 Python 中操作 Excel 公式,需要一個能夠完整處理公式讀寫和計算的庫。雖然 openpyxl 等開源庫可以完成基礎的公式寫入和讀取,但其對復雜函數的支持有限,且無法在 Python 內部直接計算公式結果。
這篇文章將使用 Free Spire.XLS for Python 庫演示如何以編程方式處理Excel公式。它是一個免費的 Python Excel 庫,支持包括 .xls、.xlsx、.xlsm, .xlsb, .ods, .et 在內的多種文件格式,并內置計算引擎,可直接在 Python 中完成數百種 Excel 函數的計算,無需依賴 Microsoft Excel。
安裝方式
在終端中運行以下命令,從 PyPI 安裝 Free Spire.XLS for Python:
pip install spire.xls.free
安裝完成后,在 Python 腳本中導入庫以訪問該庫的類和方法:
from spire.xls import *
步驟 1:使用 Python 生成帶公式的 Excel 文件
為了演示如何在 Python 中讀取、修改和計算 Excel 公式,我們先創(chuàng)建一個包含真實數據的 Excel 工作簿。這個工作簿里包含產品信息、數量、單價、折扣,以及一些常用公式,比如算術運算、SUM 和 AVERAGE。
通過程序生成Excel 文件,你可以直接運行示例,清楚看到公式的計算結果,而無需手動準備數據。
實現代碼如下:
from spire.xls import *
# 創(chuàng)建新工作簿
workbook = Workbook()
# 獲取第一個工作表
sheet = workbook.Worksheets[0]
sheet.Name = "銷售數據" # 設置工作表名稱
# 添加表頭并設置樣式
headers = ["產品", "數量", "單價", "折扣 (%)", "小計", "折后總價"]
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)
# 添加示例數據并設置對齊方式
data = [
("鍵盤", 10, 25, 5, "", ""),
("鼠標", 15, 12, 0, "", ""),
("顯示器", 8, 150, 10, "", "需檢查"),
("USB 數據線", 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()
# 設置所有行高
for row in range(1, sheet.LastRow + 1):
sheet.Rows[row - 1].RowHeight = 15
# 設置所有列寬
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 公式
當你收到別人制作的 Excel 文件,想確認公式是否正確或覆蓋了所有計算邏輯時,就需要讀取這些公式。
你可以遍歷工作表的已用單元格,通過 HasFormula 屬性判斷哪些單元格包含公式。對于每個含有公式的單元格,使用 Formula 屬性獲取公式,再通過 FormulaValue 屬性獲取公式的計算結果。這樣,就能清楚地了解 Excel 中各個公式的實際計算情況。
實現代碼如下:
from spire.xls import *
# 創(chuàng)建工作簿對象
workbook = Workbook()
# 加載現有 Excel 文件
workbook.LoadFromFile("公式.xlsx")
# 獲取第一個工作表
sheet = workbook.Worksheets[0]
# 獲取工作表中已用的單元格范圍
usedRange = sheet.AllocatedRange
print("=== 讀取現有公式 ===")
# 遍歷已用范圍內的所有單元格
for cell in usedRange:
if cell.HasFormula:
print(f"單元格 {cell.RangeAddressLocal} 公式: {cell.Formula}")
print(f"計算結果: {cell.FormulaValue}")
# 釋放工作簿資源
workbook.Dispose()輸出結果與示例 Excel 文件中各公式及其計算結果一致:

步驟 3:在 Python 中修改和計算 Excel 公式
如果需要更新現有公式,只需要將新的公式表達式賦值給相應單元格的Formula屬性。修改完成后,需要調用 CalculateAllValue() 方法重新計算工作表中的公式,這樣可以確保所有計算結果都是最新且準確的。
實現代碼如下:
from spire.xls import *
# 加載現有工作簿
workbook = Workbook()
workbook.LoadFromFile("公式.xlsx")
# 訪問第一個工作表
sheet = workbook.Worksheets[0]
# 更新現有數據
sheet.Range["C2"].NumberValue = 27 # 修改鍵盤單價
sheet.Range["D4"].NumberValue = 12 # 修改顯示器折扣
# 修改現有公式
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 – 更新單元格中的數值。
- Formula – 讀取或為單元格設置公式。
- CalculateAllValue() – 重新計算公式,可在以下對象上調用:
- CellRange – 僅計算該單元格(依賴單元格不更新)。
- Worksheet – 計算當前工作表中所有公式。
- Workbook – 計算工作簿中所有工作表的公式。
- FormulaValue – 獲取公式的計算結果。
為了確保準確性,推薦在工作表或工作簿級別進行計算,因為單個單元格重新計算不會自動更新依賴公式。
附加:Free Spire.XLS for Python 與 openpyxl 公式處理比較
在 Python 中處理 Excel 公式時,應選擇既支持讀取又能準確計算公式的庫。以下是 Free Spire.XLS for Python 與 openpyxl 的對比:
| 特性 | Free Spire.XLS for Python | openpyxl |
| 公式支持 | 支持廣泛的算術、邏輯、文本、日期、財務函數及復雜表達式 | 僅支持寫入公式 |
| 公式計算 | 內置計算引擎,可直接計算,無需 Excel | 無內部計算,需要 Excel 或第三方計算 |
| 文件格式兼容 | 支持 .xls, .xlsx, .xlsm, .xlsb,保持公式完整性 | 僅支持 .xlsx, .xlsm,不支持舊版 .xls |
| 跨平臺 | Windows、macOS、Linux | 純 Python,輕量跨平臺 |
綜上,如果需要在 Python 中完整操作 Excel 公式并進行自動計算,Free Spire.XLS for Python 是更全面的選擇。
到此這篇關于Python實現讀取、修改和計算 Excel 公式的示例詳解的文章就介紹到這了,更多相關Python操作Excel公式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python內置的HTTP協議服務器SimpleHTTPServer使用指南
這篇文章主要介紹了Python內置的HTTP協議服務器SimpleHTTPServer使用指南,SimpleHTTPServer本身的功能十分簡單,文中介紹了需要的朋友可以參考下2016-03-03
python3環(huán)境搭建過程(利用Anaconda+pycharm)完整版
這篇文章主要介紹了python3環(huán)境搭建過程(利用Anaconda+pycharm)完整版,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08
判斷Threading.start新線程是否執(zhí)行完畢的實例
這篇文章主要介紹了判斷Threading.start新線程是否執(zhí)行完畢的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05

