最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python批量處理Excel工作簿和工作表的完整代碼

 更新時間:2026年07月02日 09:11:13   作者:楊利杰YJlio  
這篇文章主要為大家詳細(xì)介紹了Python批量處理Excel的相關(guān)技巧,涵蓋os路徑、文件篩選、異常處理等流程,文章的示例代碼講解詳細(xì),希望幫助大家更高效的自動化辦公

前言

從這一章開始,Python 處理 Excel 的重點(diǎn)就不再只是“讀一張表、改幾個單元格”,而是進(jìn)入真正的辦公自動化場景:批量處理工作簿和工作表。這類需求在實(shí)際工作中非常常見,比如一個文件夾里有幾十個甚至幾百個 Excel,需要統(tǒng)一改名、統(tǒng)一整理工作表、批量合并數(shù)據(jù)、批量生成結(jié)果文件。

這張圖展示的是本篇文章的整體主題:第4章導(dǎo)讀,核心就是用 Python 批量處理 Excel 工作簿和工作表。

從圖中可以看出,批量處理 Excel 不是單純“寫幾行代碼打開文件”這么簡單,它至少涉及三個對象: 數(shù)據(jù)源文件夾、Python 自動處理邏輯、輸出結(jié)果文件夾。如果這三個對象沒有分清楚,后面的腳本很容易寫成一次性的臨時代碼,能跑一次,但很難復(fù)用。

我不建議一上來就追求復(fù)雜代碼。真正穩(wěn)的學(xué)習(xí)方式,是先把“文件從哪里來、處理什么、結(jié)果放哪里”這條鏈路想清楚。Python 辦公自動化的價值,不在于炫技,而在于把重復(fù)動作變成穩(wěn)定流程。

2. 適用場景:這一章解決的是“重復(fù)勞動”問題

在日常辦公里,Excel 最折磨人的地方不是做一次,而是重復(fù)做很多次。比如財務(wù)、資產(chǎn)、行政、人事、項目管理、桌面支持統(tǒng)計表,經(jīng)常會遇到多個部門分別提交表格,最后需要統(tǒng)一合并、整理、篩選、歸檔。

典型場景包括:批量新建工作簿、批量打開工作簿、批量重命名工作表、批量復(fù)制工作表、批量合并多個 Excel、批量拆分一個匯總表、批量導(dǎo)出結(jié)果文件。這些任務(wù)如果靠手工做,最大的問題不是慢,而是容易出錯。

推薦做法是先把任務(wù)拆成“文件層、Excel層、數(shù)據(jù)層”。文件層關(guān)心路徑和文件名,Excel 層關(guān)心工作簿和工作表,數(shù)據(jù)層關(guān)心表格內(nèi)容和字段邏輯。只要拆分清楚,后面的代碼就不會亂。

這里要注意一個判斷:如果你只是讀寫 Excel 文件數(shù)據(jù),很多時候 pandasopenpyxl 就夠了;如果你需要像人工一樣操作 Excel 軟件,比如調(diào)用宏、打印、處理公式刷新、操作打開的工作簿,那么 xlwings 更適合。 不要把所有 Excel 自動化都無腦交給同一個庫處理。

3. 學(xué)習(xí)路線:先跑通,再理解,再遷移

這一章我更建議用“案例驅(qū)動”的方式學(xué)。原因很簡單:Excel 自動化不是純理論知識,很多問題只有真正跑腳本時才會暴露,比如路徑寫錯、文件被占用、工作表名稱重復(fù)、字段名不一致、保存路徑不存在。

這張圖展示的是我理解的案例驅(qū)動學(xué)習(xí)路徑:先實(shí)現(xiàn)代碼,再做代碼解析,然后補(bǔ)充知識延伸,最后做到舉一反三。

從圖中能看出,真正有效的學(xué)習(xí)不是“復(fù)制一段代碼結(jié)束”,而是要經(jīng)歷四個動作: 跑通、拆解、補(bǔ)充、遷移。如果只停留在第一步,遇到自己的真實(shí) Excel 文件時,很快就會卡住。

我的建議是,每學(xué)一個案例,都按下面這個順序復(fù)盤:代碼能不能運(yùn)行;運(yùn)行結(jié)果對不對;關(guān)鍵參數(shù)能不能解釋;換一個文件夾、換一個字段、換一個輸出路徑還能不能改出來。能走完這四步,才算真正掌握。

這里最容易犯的錯,是只收藏代碼,不驗證代碼。收藏代碼不會提升能力,只有把代碼改成自己的業(yè)務(wù)場景,并且能解釋每一步為什么這么寫,才會真正形成可復(fù)用能力。

4. 核心原理:os、xlwings、pandas 各自負(fù)責(zé)什么

第4章最關(guān)鍵的地方,不是記住某一個函數(shù),而是理解不同工具的分工。Python 處理 Excel 時,很多新手會把所有問題都混在一起:文件找不到、工作表打不開、數(shù)據(jù)合并失敗、保存結(jié)果異常。實(shí)際上這些問題屬于不同層級,應(yīng)該分別處理。

這張圖展示的是批量處理 Excel 時常用的三大工具組合:os 管文件,xlwings 動 Excel,pandas 算數(shù)據(jù)。

從圖中可以看出,這三個工具并不是互相替代的關(guān)系,而是分工協(xié)作。 os 更偏底層文件管理,xlwings 更偏 Excel 應(yīng)用操控,pandas 更偏數(shù)據(jù)清洗和分析。把這件事想明白,后面寫代碼就不會亂選工具。

4.1 os:負(fù)責(zé)文件系統(tǒng)層面的批處理

os 主要解決“文件在哪里、文件叫什么、要不要處理這個文件”的問題。比如遍歷目錄、拼接路徑、判斷擴(kuò)展名、重命名文件、創(chuàng)建輸出目錄,這些都屬于文件系統(tǒng)層面的工作。

import os

folder = r"C:\Temp\excel_batch"

for file_name in os.listdir(folder):
    if file_name.endswith(".xlsx"):
        full_path = os.path.join(folder, file_name)
        print(full_path)

這段代碼的作用很簡單:遍歷指定文件夾,只找出擴(kuò)展名為 .xlsx 的文件。真實(shí)工作中一定要加過濾條件,因為 Excel 文件夾里可能會有臨時文件,比如 ~$xxx.xlsx。 如果不排除臨時文件,腳本可能會報錯,甚至誤處理不該處理的文件。

4.2 xlwings:負(fù)責(zé)像人工一樣操作 Excel

xlwings 的特點(diǎn)是可以調(diào)用本機(jī) Excel 程序,適合處理那些需要 Excel 應(yīng)用參與的動作。比如打開工作簿、操作工作表、調(diào)用 VBA、刷新公式、打印文件等。

import xlwings as xw

app = xw.App(visible=False)
wb = app.books.open(r"C:\Temp\excel_batch\demo.xlsx")

sheet = wb.sheets[0]
sheet.range("A1").value = "Python 批量處理測試"

wb.save()
wb.close()
app.quit()

這里要注意,xlwings 通常依賴本機(jī) Excel 環(huán)境。也就是說,它更像是“自動幫你操作 Excel 軟件”。 如果目標(biāo)電腦沒有安裝 Excel,或者 Excel 被彈窗卡住,腳本就可能異常。

4.3 pandas:負(fù)責(zé)數(shù)據(jù)清洗、匯總和導(dǎo)出

pandas 更適合處理表格數(shù)據(jù)本身,比如讀取 Excel、篩選行、選擇列、分組匯總、拼接多個表格、導(dǎo)出結(jié)果文件。它不是在模擬人工點(diǎn) Excel,而是在直接處理數(shù)據(jù)。

import pandas as pd

df = pd.read_excel(r"C:\Temp\excel_batch\sales.xlsx")

result = df.groupby("產(chǎn)品", as_index=False)["銷售額"].sum()

result.to_excel(r"C:\Temp\excel_batch\銷售額匯總.xlsx", index=False)

如果需求是“把多個表的數(shù)據(jù)匯總成一個結(jié)果”, 優(yōu)先考慮 pandas,通常更快、更穩(wěn)定,也更容易批量化。但是如果需求涉及保留復(fù)雜格式、宏、打印、圖表刷新,就需要結(jié)合 xlwings 或其他庫判斷。

5. 批處理通用模板:換的是邏輯,不換的是流程

批量處理 Excel 的底層流程其實(shí)很固定。無論是批量新建、批量打開、批量合并,還是批量重命名,本質(zhì)上都是先確定路徑,再遍歷文件,然后過濾目標(biāo)文件,逐個處理,最后保存輸出并關(guān)閉資源。

這張圖展示的是批量處理 Excel 的通用模板,從確定路徑一直到關(guān)閉資源,基本覆蓋了批處理腳本的完整生命周期。

從圖中能看出,批處理不是“想到哪寫到哪”,而是一套固定流程。 真正變化的是中間的數(shù)據(jù)處理邏輯,不變的是外層流程框架。一旦掌握這個模板,后續(xù)遇到類似需求,只需要替換處理邏輯,不需要每次從零開始。

下面是一段更接近真實(shí)工作的批處理代碼模板,用的是 pathlibpandas。相比傳統(tǒng)的 os.path,pathlib 寫路徑會更清晰一些。

from pathlib import Path
import pandas as pd

input_dir = Path(r"C:\Temp\excel_batch\input")
output_dir = Path(r"C:\Temp\excel_batch\output")
output_dir.mkdir(exist_ok=True)

for file_path in input_dir.glob("*.xlsx"):
    # 跳過 Excel 臨時文件
    if file_path.name.startswith("~$"):
        continue

    print(f"正在處理:{file_path.name}")

    df = pd.read_excel(file_path)

    # 示例處理邏輯:刪除完全空白行
    df = df.dropna(how="all")

    output_path = output_dir / f"{file_path.stem}_處理后.xlsx"
    df.to_excel(output_path, index=False)

print("批量處理完成")

這段代碼不復(fù)雜,但結(jié)構(gòu)比較穩(wěn)。它先定義輸入目錄和輸出目錄,再遍歷所有 .xlsx 文件,跳過 Excel 臨時文件,讀取數(shù)據(jù),執(zhí)行處理邏輯,最后輸出到新目錄。 真實(shí)工作中,盡量不要直接覆蓋原文件,先輸出到新目錄更安全。

6. 運(yùn)行前準(zhǔn)備:批量操作前必須先排雷

批量處理最怕什么?不是代碼報錯,而是代碼沒報錯,卻把一批文件處理錯了。尤其是涉及資產(chǎn)、財務(wù)、人事、項目數(shù)據(jù)時,誤覆蓋、誤刪除、誤合并都會帶來很高的返工成本。

這張圖展示的是運(yùn)行批處理腳本前的準(zhǔn)備動作:統(tǒng)一目錄、先做備份、關(guān)閉占用、驗證結(jié)果。

從圖中可以看出,運(yùn)行前準(zhǔn)備不是可有可無的形式動作,而是批量處理的安全邊界。 批量腳本一旦寫錯,錯誤會被快速放大。所以越是批量任務(wù),越要先小范圍測試,再擴(kuò)大處理范圍。

6.1 統(tǒng)一目錄,避免路徑混亂

建議把測試文件、正式輸入文件、輸出文件分開放。比如使用 input、output、backup 三個目錄。這樣即使腳本出問題,也比較容易回退。

C:\Temp\excel_batch
├─ input      原始待處理文件
├─ output     腳本輸出結(jié)果
└─ backup     原始文件備份

推薦做法是先復(fù)制 3 到 5 個樣本文件進(jìn)行測試。不要一開始就對幾百個文件直接運(yùn)行腳本,這種做法看似效率高,實(shí)際風(fēng)險很大。

6.2 先做備份,避免不可逆損失

只要腳本涉及批量改名、刪除、移動、覆蓋保存,都應(yīng)該先備份。尤其是初學(xué)階段,不要過度相信自己的代碼。代碼沒有主觀判斷,它只會嚴(yán)格執(zhí)行你寫下的邏輯。

不要在原始文件上直接做破壞性操作。如果必須覆蓋,也應(yīng)該等測試通過后,再對正式文件執(zhí)行。

6.3 關(guān)閉占用,避免保存失敗

Excel 文件被打開時,腳本可能無法寫入,或者寫入結(jié)果異常。特別是多人共享目錄、企業(yè)網(wǎng)盤、同步盤環(huán)境下,文件占用問題更常見。

如果使用 xlwings,還要注意腳本結(jié)束后是否正確執(zhí)行 wb.close()app.quit()。否則后臺可能殘留 Excel 進(jìn)程,下一次運(yùn)行時就會出現(xiàn)莫名其妙的問題。

6.4 驗證結(jié)果,不能只看“運(yùn)行完成”

腳本打印“處理完成”不代表結(jié)果正確。真正的驗證至少包括:輸出文件數(shù)量是否正確、字段是否完整、行數(shù)是否符合預(yù)期、關(guān)鍵金額或數(shù)量是否一致、是否存在空文件或異常文件。

from pathlib import Path

output_dir = Path(r"C:\Temp\excel_batch\output")
files = list(output_dir.glob("*.xlsx"))

print(f"輸出文件數(shù)量:{len(files)}")
for file in files[:5]:
    print(file.name)

這一小段代碼可以快速檢查輸出目錄中生成了多少個 Excel 文件。對于批量任務(wù)來說, 驗證動作本身也應(yīng)該腳本化,不要完全依賴人工肉眼檢查。

7. 常見問題與踩坑提醒

Excel 批處理看起來門檻不高,但真實(shí)工作里有不少坑。下面這些問題,我建議在寫腳本時就提前考慮,而不是等報錯后再補(bǔ)救。

7.1 路徑問題:中文路徑和反斜杠

Windows 路徑里經(jīng)常有反斜杠,如果直接寫字符串,可能會觸發(fā)轉(zhuǎn)義問題。建議使用原始字符串 r"路徑",或者使用 pathlib.Path。

from pathlib import Path

folder = Path(r"C:\Temp\excel_batch\input")

推薦使用 pathlib 管理路徑。路徑拼接更清晰,也能減少手寫反斜杠導(dǎo)致的錯誤。

7.2 臨時文件問題:跳過 ~$ 開頭文件

Excel 打開文件時,目錄里可能會出現(xiàn)以 ~$ 開頭的臨時文件。如果腳本沒有跳過這些文件,就可能讀取失敗。

if file_path.name.startswith("~$"):
    continue

這個判斷很小,但非常實(shí)用。很多批量腳本現(xiàn)場報錯,就是因為把 Excel 臨時文件也當(dāng)成正式文件處理了。

7.3 字段名問題:不要假設(shè)每張表都一樣

多個部門提交的 Excel,看起來模板一樣,但字段名可能有細(xì)微差異,比如“資產(chǎn)編號”和“資產(chǎn)編碼”、“部門名稱”和“所屬部門”。如果腳本直接按固定字段讀取,就會報錯。

required_columns = {"資產(chǎn)編號", "資產(chǎn)名稱", "使用部門"}

missing = required_columns - set(df.columns)
if missing:
    print(f"字段缺失:{missing}")

這里的關(guān)鍵不是讓代碼更復(fù)雜,而是讓腳本提前發(fā)現(xiàn)問題。 批量處理腳本要有基本的輸入校驗,否則錯誤會擴(kuò)散到最終結(jié)果。

7.4 資源釋放問題:打開了就要關(guān)閉

如果使用 xlwings 批量打開 Excel,一定要處理關(guān)閉邏輯?,F(xiàn)場經(jīng)常出現(xiàn)腳本運(yùn)行幾次后越來越卡,本質(zhì)上可能是后臺 Excel 進(jìn)程沒有釋放。

import xlwings as xw

app = xw.App(visible=False)
try:
    wb = app.books.open(r"C:\Temp\excel_batch\demo.xlsx")
    # 這里寫處理邏輯
    wb.save()
    wb.close()
finally:
    app.quit()

推薦使用 try...finally 保證資源釋放。不要只寫正常流程,因為真實(shí)環(huán)境里異常比你想象得多。

8. 效果驗證:批處理結(jié)果要能復(fù)盤

我認(rèn)為一段合格的辦公自動化腳本,不只是能生成文件,還應(yīng)該能留下最基本的處理痕跡。比如處理了多少個文件,跳過了多少個文件,哪些文件失敗,失敗原因是什么。

下面這個模板加入了簡單日志,適合后續(xù)改造成更完整的批處理工具。

from pathlib import Path
import pandas as pd

input_dir = Path(r"C:\Temp\excel_batch\input")
output_dir = Path(r"C:\Temp\excel_batch\output")
output_dir.mkdir(exist_ok=True)

success_count = 0
fail_count = 0

for file_path in input_dir.glob("*.xlsx"):
    if file_path.name.startswith("~$"):
        continue

    try:
        df = pd.read_excel(file_path)
        df = df.dropna(how="all")

        output_path = output_dir / f"{file_path.stem}_處理后.xlsx"
        df.to_excel(output_path, index=False)

        print(f"[成功] {file_path.name} -> {output_path.name}")
        success_count += 1

    except Exception as e:
        print(f"[失敗] {file_path.name},原因:{e}")
        fail_count += 1

print(f"處理完成:成功 {success_count} 個,失敗 {fail_count} 個")

這段代碼雖然還不是完整工具,但已經(jīng)比單純打印“完成”要可靠。它能告訴我哪些文件成功,哪些文件失敗,失敗原因是什么。 辦公自動化腳本要可復(fù)盤,否則出了問題很難定位。

如果后續(xù)要提升成正式工具,可以繼續(xù)增加日志文件、圖形界面、輸出目錄選擇、失敗文件清單、處理前后數(shù)量校驗等功能。對企業(yè)桌面支持或辦公自動化場景來說,這些能力比單純寫一段“能跑的代碼”更有價值。

9. 總結(jié)提升:這一章真正要練的是自動化思維

這一篇是第4章的導(dǎo)讀,我不想把它寫成簡單的目錄介紹。真正值得帶走的是一套思維: 先識別重復(fù)動作,再抽象成流程,最后用 Python 固化成腳本。

如果只看代碼,這一章可能不難;但如果放到真實(shí)辦公場景里,難點(diǎn)會變成路徑管理、文件篩選、異常處理、結(jié)果驗證和風(fēng)險控制。也就是說,Python 技術(shù)只是工具,真正決定腳本質(zhì)量的是你對業(yè)務(wù)流程的拆解能力。

我的建議是:后續(xù)每學(xué)一個案例,都保留一份“可復(fù)用模板”。比如批量遍歷模板、批量讀取模板、批量輸出模板、異常日志模板。積累到一定程度后,很多臨時需求就不用重新寫,只需要拼裝和改造。

最后再提醒一句:批量腳本不要直接對正式文件下手。先備份、先小樣本測試、先驗證輸出,再擴(kuò)大處理范圍。自動化不是為了冒險,而是為了讓重復(fù)工作更穩(wěn)定、更可控。

以上就是Python批量處理Excel工作簿和工作表的完整代碼的詳細(xì)內(nèi)容,更多關(guān)于Python處理Excel工作簿和工作表的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 基于Python實(shí)現(xiàn)圖像的傅里葉變換

    基于Python實(shí)現(xiàn)圖像的傅里葉變換

    傅里葉變換是一種函數(shù)在空間域和頻率域的變換,從空間域到頻率域的變換是傅里葉變換,而從頻率域到空間域是傅里葉的反變換。這篇文章主要為大家介紹的是通過Python實(shí)現(xiàn)圖像的傅里葉變換,感興趣的可以了解一下
    2021-12-12
  • Python讀取Windows和Linux的CPU、GPU、硬盤等部件溫度的讀取方法

    Python讀取Windows和Linux的CPU、GPU、硬盤等部件溫度的讀取方法

    本文詳細(xì)介紹了如何使用Python在Windows和Linux系統(tǒng)上通過OpenHardwareMonitor和psutil庫讀取CPU、GPU等部件的溫度,包括Windows下的兩種方法以及Linux下的簡單實(shí)現(xiàn),感興趣的小伙伴跟著小編一起來看看吧
    2025-02-02
  • Django上線部署之IIS的配置方法

    Django上線部署之IIS的配置方法

    這篇文章主要介紹了Django上線部署之IIS的配置方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • Python實(shí)戰(zhàn)整活之聊天機(jī)器人

    Python實(shí)戰(zhàn)整活之聊天機(jī)器人

    這篇文章主要介紹了Python實(shí)戰(zhàn)整活之聊天機(jī)器人,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Python利用 utf-8-sig 編碼格式解決寫入 csv 文件亂碼問題

    Python利用 utf-8-sig 編碼格式解決寫入 csv 文件亂碼問題

    這篇文章主要介紹了Python利用 utf-8-sig 編碼格式解決寫入 csv 文件亂碼問題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • PyTorch模型的保存與加載方法實(shí)例

    PyTorch模型的保存與加載方法實(shí)例

    Pytorch保存模型其實(shí)非常簡單,下面這篇文章主要給大家介紹了關(guān)于PyTorch模型的保存與加載的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Python之str操作方法(詳解)

    Python之str操作方法(詳解)

    下面小編就為大家?guī)硪黄狿ython之str操作方法(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Python爬蟲beautifulsoup4常用的解析方法總結(jié)

    Python爬蟲beautifulsoup4常用的解析方法總結(jié)

    今天小編就為大家分享一篇關(guān)于Python爬蟲beautifulsoup4常用的解析方法總結(jié),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Python簡單幾步畫個鉆石戒指

    Python簡單幾步畫個鉆石戒指

    這篇文章主要介紹了Python簡單幾步畫個鉆石戒指,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09
  • 利用Python實(shí)現(xiàn)劉謙春晚魔術(shù)

    利用Python實(shí)現(xiàn)劉謙春晚魔術(shù)

    劉謙在2024年春晚上的撕牌魔術(shù)的數(shù)學(xué)原理非常簡單,可以用Python完美復(fù)現(xiàn),文中通過代碼示例給大家介紹的非常詳細(xì),感興趣的同學(xué)可以自己動手嘗試一下
    2024-02-02

最新評論

临海市| 密山市| 上饶市| 光泽县| 溧水县| 青龙| 长宁区| 阳西县| 寿光市| 杭锦后旗| 湘西| 张北县| 若羌县| 鄢陵县| 温州市| 库尔勒市| 汝阳县| 璧山县| 静宁县| 灌云县| 永昌县| 诸暨市| 南宁市| 景谷| 望城县| 元阳县| 邹城市| 会泽县| 临西县| 安新县| 泰和县| 西贡区| 抚宁县| 玛纳斯县| 武陟县| 防城港市| 临沧市| 朝阳县| 乌审旗| 错那县| 黔西|