使用Python刪除Excel單元格公式并保留數(shù)值
在日常業(yè)務(wù)中,我們經(jīng)常會(huì)遇到含有大量公式的 Excel 文件。例如財(cái)務(wù)報(bào)表、銷售數(shù)據(jù)分析表、項(xiàng)目預(yù)算表等。這些公式在計(jì)算時(shí)非常有用,但有時(shí)我們希望將公式“去掉”,只保留最終的計(jì)算結(jié)果。原因可能包括:
- 數(shù)據(jù)歸檔:保存最終結(jié)果,避免后續(xù)公式被誤改。
- 共享報(bào)表:發(fā)給不熟悉 Excel 的人時(shí),避免因公式丟失數(shù)據(jù)或出錯(cuò)。
- 性能優(yōu)化:當(dāng) Excel 文件公式過多時(shí),計(jì)算速度會(huì)變慢,轉(zhuǎn)化為純數(shù)值可提升加載效率。
手動(dòng)操作時(shí),通常做法是復(fù)制并“粘貼為值”。本文將介紹如何使用 Free Spire.XLS for Python 在代碼中自動(dòng)完成這一過程,并結(jié)合代碼邏輯詳細(xì)解析。
通過pip安裝:
pip install spire.xls.free
1. 初始化工作簿并加載文件
from spire.xls import Workbook, ExcelClearOptions
# 加載 Excel 文件
wb = Workbook()
wb.LoadFromFile("Sample.xlsx")
sheet = wb.Worksheets.get_Item(0)說明:
這里首先創(chuàng)建了 Workbook 對(duì)象并加載本地文件 Sample.xlsx,然后獲取第一個(gè)工作表進(jìn)行處理。實(shí)際業(yè)務(wù)中,你可以根據(jù)文件路徑和工作表名稱來靈活選擇目標(biāo)。
2. 遍歷單元格并判斷是否包含公式并處理
for row in range(sheet.Rows.Count):
for col in range(sheet.Columns.Count):
cell = sheet.Range.get_Item(row + 1, col + 1)
if cell.HasFormula:
value = cell.FormulaValue
cell.Clear(ExcelClearOptions.ClearContent)
cell.Value = value關(guān)鍵步驟解析:
- 遍歷所有單元格:通過
sheet.Rows.Count和sheet.Columns.Count獲取行列總數(shù),循環(huán)檢查。 - 判斷公式:
cell.HasFormula屬性用于判斷該單元格是否含有公式。 - 獲取公式結(jié)果:
cell.FormulaValue返回公式計(jì)算后的數(shù)值。 - 清除原公式:
cell.Clear(ExcelClearOptions.ClearContent)會(huì)清除內(nèi)容(包括公式),但保留單元格的格式。 - 寫入結(jié)果值:
cell.Value = value將公式的計(jì)算結(jié)果寫回單元格,實(shí)現(xiàn)“公式轉(zhuǎn)數(shù)值”。
這樣處理后,Excel 中的公式將被替換為靜態(tài)數(shù)據(jù)。
3. 保存處理后的文件
wb.SaveToFile("output/remove_formulas.xlsx")說明:
處理完成后,將文件另存為 output/remove_formulas.xlsx,以免覆蓋原始數(shù)據(jù)。建議在實(shí)際工作中也保留原文件,以便追溯。
移除效果展示:

4. 擴(kuò)展說明
(1)為什么不直接復(fù)制粘貼?
雖然 Excel 界面中“復(fù)制 → 粘貼為值”很快,但對(duì)于幾十個(gè)甚至上百個(gè)文件的批量處理,手動(dòng)操作效率極低。而使用 Python 自動(dòng)化,可以批量處理文件夾下所有 Excel 文件,幾分鐘即可完成。
(2)保留格式的重要性
有些場(chǎng)景下,表格中含有復(fù)雜的單元格格式(字體、邊框、底色等),如果直接刪除單元格內(nèi)容,可能會(huì)破壞表格美觀。使用上述方法可以確保只刪除公式,不影響格式,非常適合業(yè)務(wù)報(bào)表。
(3)與只讀報(bào)表結(jié)合
在企業(yè)應(yīng)用中,常見做法是:
- 第一步:在開發(fā)環(huán)境使用公式計(jì)算數(shù)據(jù);
- 第二步:通過腳本批量去除公式,生成靜態(tài)報(bào)表;
- 第三步:將靜態(tài)報(bào)表分發(fā)給業(yè)務(wù)部門或客戶。
這樣既保證了計(jì)算的準(zhǔn)確性,也避免了誤操作風(fēng)險(xiǎn)。
關(guān)鍵類與屬性總結(jié)
| 類 / 屬性 / 方法 | 說明 |
|---|---|
Workbook | 表示 Excel 工作簿,支持加載、保存等操作 |
Workbook.LoadFromFile() | 從文件加載 Excel |
Workbook.SaveToFile() | 保存 Excel 文件 |
Worksheet | 表示單個(gè)工作表,所有數(shù)據(jù)都在此操作 |
sheet.Rows.Count | 獲取工作表總行數(shù) |
sheet.Columns.Count | 獲取工作表總列數(shù) |
Range | 表示單元格或區(qū)域 |
Range.get_Item(row, col) | 根據(jù)行列索引獲取單元格(索引從 1 開始) |
Range.HasFormula | 判斷單元格是否含有公式 |
Range.FormulaValue | 獲取公式計(jì)算后的數(shù)值 |
Range.Clear(ExcelClearOptions) | 按指定選項(xiàng)清除單元格內(nèi)容(如內(nèi)容、格式等) |
Range.Value | 設(shè)置或獲取單元格的文本/數(shù)值內(nèi)容 |
ExcelClearOptions.ClearContent | 清除單元格內(nèi)容但保留格式 |
總結(jié)
本文演示了如何使用 Spire.XLS for Python 刪除 Excel 文件中的公式并保留其計(jì)算結(jié)果。與手動(dòng)操作相比,代碼實(shí)現(xiàn)不僅更高效,而且可批量處理多個(gè)文件,非常適合財(cái)務(wù)、統(tǒng)計(jì)、數(shù)據(jù)歸檔等業(yè)務(wù)場(chǎng)景。
通過掌握 Workbook、Worksheet、Range 以及 HasFormula、FormulaValue 等核心屬性方法,你可以輕松實(shí)現(xiàn) Excel 自動(dòng)化處理,減少重復(fù)勞動(dòng),提升工作效率。
以上就是使用Python刪除Excel單元格公式并保留數(shù)值的詳細(xì)內(nèi)容,更多關(guān)于Python刪除Excel單元格的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python實(shí)現(xiàn)數(shù)據(jù)庫表的監(jiān)控警告的項(xiàng)目實(shí)踐
本文主要介紹了使用Python 實(shí)現(xiàn)對(duì)數(shù)據(jù)庫表的監(jiān)控告警功能, 并將告警信息通過釘釘機(jī)器人發(fā)送到釘釘群,具有一定的參考價(jià)值,感興趣的可以了解一下2024-05-05
python字典中items()函數(shù)用法實(shí)例
Python字典items()函數(shù)作用以列表返回可遍歷的(鍵, 值)元組數(shù)組,下面這篇文章主要給大家介紹了關(guān)于python字典中items()函數(shù)用法的相關(guān)資料,需要的朋友可以參考下2022-11-11
深入詳解Python中動(dòng)態(tài)方法調(diào)用的各種方法
在Python編程中,我們經(jīng)常會(huì)遇到需要根據(jù)??運(yùn)行時(shí)條件??動(dòng)態(tài)調(diào)用對(duì)象方法的場(chǎng)景,本文將深入探討Python中動(dòng)態(tài)方法調(diào)用的各種技術(shù),感興趣的小伙伴可以了解下2025-10-10
Python移動(dòng)測(cè)試開發(fā)subprocess模塊項(xiàng)目實(shí)戰(zhàn)
這篇文章主要為大家介紹了Python移動(dòng)測(cè)試開發(fā)subprocess模塊項(xiàng)目實(shí)戰(zhàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
Python調(diào)用SQLPlus來操作和解析Oracle數(shù)據(jù)庫的方法
這篇文章主要介紹了Python調(diào)用SQLPlus來操作和解析Oracle數(shù)據(jù)庫的方法,這樣用SQL*Plus方式來分析Oracle中的數(shù)據(jù)就變得十分方便,需要的朋友可以參考下2016-04-04

