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

Python批量替換Excel多個(gè)工作簿的行數(shù)據(jù)

 更新時(shí)間:2026年07月01日 09:05:38   作者:楊利杰YJlio  
本文介紹了使用Python批量替換多個(gè)Excel工作簿中特定行數(shù)據(jù)的方法,重點(diǎn)解決多文件數(shù)據(jù)統(tǒng)一修正的需求,適合財(cái)務(wù)、銷售、客戶資料等場(chǎng)景的數(shù)據(jù)修正任務(wù)

1. 問題背景:為什么要批量替換多個(gè)工作簿的行數(shù)據(jù)

本文主題是 批量替換多個(gè)工作簿的行數(shù)據(jù)。和前面批量調(diào)整格式、批量改文件名不同,這一節(jié)已經(jīng)進(jìn)入“數(shù)據(jù)修正”層面,操作風(fēng)險(xiǎn)更高,但實(shí)際價(jià)值也更大。

在日常辦公里,很多 Excel 報(bào)表的問題不是格式亂,而是源數(shù)據(jù)中有一類固定錯(cuò)誤。例如部門名稱變更、產(chǎn)品名稱寫錯(cuò)、負(fù)責(zé)人信息調(diào)整、金額或狀態(tài)字段需要統(tǒng)一修正。如果只改一個(gè)文件,手動(dòng)操作還能接受;如果幾十個(gè)工作簿里都有同樣的問題,繼續(xù)手工修改就很容易漏改、錯(cuò)改,而且后續(xù)也不好追溯。

這張圖展示的是本文的核心目標(biāo):用 Python 批量打開多個(gè) Excel 工作簿,將符合條件的舊行數(shù)據(jù)替換成新的標(biāo)準(zhǔn)行數(shù)據(jù)。

從圖中可以看出,本文不是簡單替換某個(gè)單元格,而是對(duì)一整行數(shù)據(jù)做匹配和替換。例如舊數(shù)據(jù)是 北京 | 銷售 | 張三 | 1000,新數(shù)據(jù)是 北京 | 銷售事業(yè)部 | 張三 | 1200。這種處理方式更適合“整條記錄需要統(tǒng)一修正”的場(chǎng)景。

風(fēng)險(xiǎn)提醒:整行替換比單元格替換更敏感。因?yàn)樗鼤?huì)一次性覆蓋多個(gè)字段,所以必須先確認(rèn)匹配條件足夠準(zhǔn)確,不能只憑某一個(gè)模糊字段就直接改整行。

2. 場(chǎng)景說明:哪些情況適合整行替換

批量替換行數(shù)據(jù)最適合處理“多個(gè)文件中存在同一類錯(cuò)誤記錄”的場(chǎng)景。例如分公司報(bào)表、區(qū)域報(bào)表、銷售數(shù)據(jù)、客戶信息、訂單明細(xì)等多個(gè)工作簿里,都存在同一條舊記錄,現(xiàn)在需要統(tǒng)一替換成新的標(biāo)準(zhǔn)記錄。

這張圖展示的是批量替換行數(shù)據(jù)的典型應(yīng)用場(chǎng)景。

從圖中可以看出,多個(gè) Excel 文件中都存在同樣的錯(cuò)誤數(shù)據(jù),統(tǒng)一修正后可以讓產(chǎn)品名稱、部門名稱、訂單記錄等信息保持一致。這類需求在財(cái)務(wù)報(bào)表、銷售報(bào)表、客戶資料、資產(chǎn)臺(tái)賬里都很常見。

推薦做法:如果只是某一列名稱變更,例如“銷售”改成“銷售事業(yè)部”,優(yōu)先考慮按列替換;如果一條記錄中多個(gè)字段都要同步修正,再考慮整行替換。不要把簡單問題復(fù)雜化。

我個(gè)人更建議把整行替換用于“確定性很強(qiáng)”的修正任務(wù),比如某條訂單記錄、某個(gè)員工數(shù)據(jù)、某條資產(chǎn)明細(xì)確實(shí)需要整體替換。它不適合用來做模糊清洗,也不適合在字段不穩(wěn)定的情況下直接批量執(zhí)行。

3. 核心原理:enumerate() 定位行號(hào),if 精確匹配整行

這一節(jié)的核心不是 xlwings 本身,而是兩個(gè)判斷動(dòng)作:第一,遍歷每一行時(shí)同時(shí)拿到行號(hào);第二,判斷當(dāng)前行是否和目標(biāo)舊行完全一致。前者靠 enumerate(),后者靠 if row == old_row

這張圖展示的是本文最關(guān)鍵的技術(shù)原理:用 enumerate() 拿到 Excel 行號(hào),再用 if 判斷是否精確匹配舊行。

從圖中可以看出,程序會(huì)逐行比較當(dāng)前行數(shù)據(jù)和 old_row。只有當(dāng)整行內(nèi)容完全一致時(shí),才會(huì)執(zhí)行替換,把該行改成 new_row。這里的 idx 非常關(guān)鍵,因?yàn)樗鼘?duì)應(yīng) Excel 中真實(shí)的行號(hào)。

for idx, row in enumerate(rows, start=2):
    if row == old_row:
        sht.range(f"A{idx}").value = new_row

原理說明:rows 是去掉表頭后的數(shù)據(jù)行,所以它在 Python 里從第 1 條數(shù)據(jù)開始遍歷,但在 Excel 里真實(shí)行號(hào)通常從第 2 行開始。因此這里使用 start=2,讓 idx 和 Excel 行號(hào)對(duì)齊。

注意:row == old_row 是精確匹配。只要某個(gè)單元格多了空格、數(shù)字類型不一致、日期格式不同,匹配就可能失敗。所以正式處理前一定要先確認(rèn)源數(shù)據(jù)格式。

4. 操作流程:從遍歷文件到保存結(jié)果

在寫代碼前,先把處理流程拆清楚。這類腳本不能一上來就寫替換邏輯,而要先完成文件篩選、工作表檢查、數(shù)據(jù)讀取、行匹配、寫回保存這些基本步驟。

這張圖展示的是完整執(zhí)行流程:遍歷文件、讀取表格、精確匹配、替換整行、保存結(jié)果。

從圖中可以看出,整行替換并不是單一動(dòng)作,而是一條完整鏈路。任何一個(gè)環(huán)節(jié)漏掉,都會(huì)影響最終結(jié)果。比如不檢查目標(biāo)工作表,就可能打開文件后直接報(bào)錯(cuò);不保存工作簿,就會(huì)出現(xiàn)控制臺(tái)提示替換成功,但文件內(nèi)容實(shí)際沒有變化。

推薦做法:正式運(yùn)行前先做“只打印不保存”的預(yù)覽模式,把命中的文件名和行號(hào)輸出出來。確認(rèn)命中范圍沒問題,再放開寫入和保存。

5. 完整代碼:批量替換多個(gè)工作簿的整行數(shù)據(jù)

下面這段代碼使用 xlwings 批量打開文件夾中的 Excel 工作簿,讀取指定工作表的數(shù)據(jù)區(qū)域,然后通過 enumerate() 逐行匹配 old_row,命中后替換為 new_row。

import os
import xlwings as xw

# ====== 需要根據(jù)實(shí)際情況修改的參數(shù) ======
folder_path = r"e:\file\target"
sheet_name = "Sheet1"

# 要被替換的整行數(shù)據(jù):必須與 Excel 中讀取出來的行完全一致
old_row = ["北京", "銷售", "張三", 1000]

# 替換后的整行數(shù)據(jù)
new_row = ["北京", "銷售事業(yè)部", "張三", 1200]
# =====================================

app = xw.App(visible=False, add_book=False)

try:
    for file_name in os.listdir(folder_path):

        # 跳過 Excel 臨時(shí)文件
        if file_name.startswith("~$"):
            continue

        # 只處理 Excel 文件
        if not file_name.lower().endswith((".xlsx", ".xls", ".xlsm")):
            continue

        full_path = os.path.join(folder_path, file_name)

        wb = app.books.open(full_path)

        try:
            sheet_names = [s.name for s in wb.sheets]

            if sheet_name not in sheet_names:
                print(f"跳過:{file_name},不存在工作表 {sheet_name}")
                continue

            sht = wb.sheets[sheet_name]

            # 讀取當(dāng)前連續(xù)數(shù)據(jù)區(qū)域
            table_rng = sht.range("A1").current_region
            table = table_rng.value

            if not table or len(table) < 2:
                print(f"跳過:{file_name},沒有可處理的數(shù)據(jù)")
                continue

            header = table[0]
            rows = table[1:]

            hit_count = 0

            for idx, row in enumerate(rows, start=2):
                if row == old_row:
                    sht.range(f"A{idx}").value = new_row
                    hit_count += 1

            if hit_count > 0:
                wb.save()
                print(f"已替換:{file_name},命中 {hit_count} 行")
            else:
                print(f"未命中:{file_name}")

        finally:
            wb.close()

finally:
    app.quit()

這段代碼里我額外保留了 hit_count,用于統(tǒng)計(jì)當(dāng)前文件命中了幾行。這個(gè)細(xì)節(jié)很實(shí)用,因?yàn)榕啃薷臄?shù)據(jù)時(shí),不能只知道“成功或失敗”,還要知道到底改了幾處。

原理說明:sht.range(f"A{idx}").value = new_row 會(huì)從當(dāng)前行的 A 列開始寫入整行數(shù)據(jù)。只要 new_row 的字段數(shù)量和原表列數(shù)一致,就可以覆蓋這一整行。

風(fēng)險(xiǎn)提醒:如果 new_row 的長度比原表列數(shù)短,后面的舊數(shù)據(jù)可能殘留;如果比原表列數(shù)長,可能寫到表格外側(cè)。整行替換前必須確認(rèn)字段數(shù)量一致。

6. 關(guān)鍵代碼理解:為什么 start=2 很重要

很多人寫到這里會(huì)誤以為 enumerate() 只是為了拿序號(hào)。這個(gè)理解不夠準(zhǔn)確。在本案例里,enumerate() 的真正價(jià)值是讓 Python 遍歷位置和 Excel 行號(hào)建立對(duì)應(yīng)關(guān)系。

假設(shè) Excel 第 1 行是表頭,真正的數(shù)據(jù)從第 2 行開始。我們把 table[1:] 取出來后,Python 里的第一條數(shù)據(jù)其實(shí)對(duì)應(yīng) Excel 第 2 行。如果不使用 start=2,寫回時(shí)就可能把行寫錯(cuò)位置。

rows = table[1:]

for idx, row in enumerate(rows, start=2):
    print(idx, row)

輸出效果可以理解為:

2 ['上海', '技術(shù)部', '李四', 900]
3 ['廣州', '市場(chǎng)部', '王五', 1100]
4 ['北京', '銷售', '張三', 1000]
5 ['深圳', '財(cái)務(wù)部', '趙六', 800]

推薦做法:只要你要把 Python 中的行數(shù)據(jù)寫回 Excel,就要先想清楚 Python 索引和 Excel 行號(hào)是否對(duì)齊。不要憑感覺寫 A1A2,那很容易錯(cuò)位。

7. 常見問題:批量替換前后必須校驗(yàn)

批量替換行數(shù)據(jù)最容易翻車的地方,通常不是語法,而是運(yùn)行前沒有校驗(yàn),運(yùn)行后沒有復(fù)核。尤其是多個(gè)工作簿批量修改,一旦規(guī)則寫錯(cuò),影響范圍會(huì)被快速放大。

這張圖展示的是批量替換整行數(shù)據(jù)時(shí)必須注意的幾個(gè)檢查點(diǎn)。

從圖中可以看出,至少要檢查五件事:跳過 ~$ 臨時(shí)文件,確認(rèn)目標(biāo)工作表存在,整行必須完全一致,替換后要保存,最后還要核對(duì)結(jié)果。這里每一步都不是裝飾,而是防止批量腳本出事故的安全動(dòng)作。

坑 1:Excel 臨時(shí)文件沒有跳過。打開 Excel 文件時(shí),同目錄可能出現(xiàn) ~$ 開頭的臨時(shí)文件。它不是正常工作簿,必須跳過。

坑 2:目標(biāo)工作表不存在。多個(gè)工作簿的工作表名稱不一定完全一致,有的叫 Sheet1,有的可能叫 明細(xì)。如果不先判斷,腳本容易中途報(bào)錯(cuò)。

坑 3:整行數(shù)據(jù)看似一樣,實(shí)際不一致。比如金額在 Excel 中讀取出來可能是 1000.0,而你寫的 old_row1000;又比如文本前后有空格。精確匹配時(shí),這些差異都會(huì)影響命中。

如果你遇到明明表里有數(shù)據(jù)卻匹配不到,可以先打印出每一行看真實(shí)讀取結(jié)果:

for idx, row in enumerate(rows, start=2):
    print(idx, row)

推薦做法:正式替換前先運(yùn)行一次預(yù)檢查,只輸出“命中的文件名、行號(hào)、舊行內(nèi)容”,不要直接保存。確認(rèn)命中范圍正確后,再執(zhí)行正式替換。

8. 效果驗(yàn)證:不要只看控制臺(tái)提示成功

腳本運(yùn)行完成后,不要只看控制臺(tái)輸出“已替換”。真正要驗(yàn)證的是:目標(biāo)文件是否真的被保存,命中數(shù)量是否符合預(yù)期,替換后的行是否完整,文件是否還能正常打開。

我建議至少做三類驗(yàn)證。第一,檢查命中數(shù)量。例如預(yù)計(jì) 6 個(gè)文件里都有這條舊記錄,那么命中數(shù)量就不應(yīng)該只有 1 個(gè)。第二,抽查 Excel 文件中的目標(biāo)行,確認(rèn)舊數(shù)據(jù)已經(jīng)變成新數(shù)據(jù)。第三,確認(rèn)文件可以正常打開,沒有因?yàn)楸4娈惓?dǎo)致?lián)p壞。

total_hits = 0

# 每個(gè)文件命中后累加
total_hits += hit_count

print(f"本次總命中行數(shù):{total_hits}")

原理說明:批量替換的驗(yàn)證邏輯不是“腳本能跑”,而是“修改范圍符合預(yù)期”。如果命中太多,可能規(guī)則過寬;如果命中太少,可能舊行寫錯(cuò)、數(shù)據(jù)格式不一致或目標(biāo)工作表不對(duì)。

不要犯的錯(cuò)誤:不要在原始文件夾里直接運(yùn)行未驗(yàn)證腳本。批量寫入 Excel 屬于破壞性操作,建議先復(fù)制一份測(cè)試目錄,再對(duì)測(cè)試目錄執(zhí)行。

9. 總結(jié)提升:把整行替換變成可復(fù)用腳本模板

這一節(jié)的核心,不是記住 enumerate() 這個(gè)函數(shù),而是理解“批量遍歷多個(gè)工作簿、讀取數(shù)據(jù)區(qū)域、精確定位目標(biāo)行、寫入新行并保存”的完整流程。

我認(rèn)為這篇筆記最值得沉淀的經(jīng)驗(yàn)有三點(diǎn)。

第一,精確匹配適合確定性修正。如果舊數(shù)據(jù)明確、字段穩(wěn)定、行內(nèi)容可控,使用 row == old_row 很安全;如果數(shù)據(jù)格式混亂,就要先清洗再匹配。

第二,批量腳本必須有命中統(tǒng)計(jì)。只輸出“已完成”沒有意義,應(yīng)該明確每個(gè)文件命中幾行、總共命中幾行,這樣才能復(fù)盤。

第三,保存前后都要留證據(jù)。正式工作里,建議保留處理日志,至少記錄文件名、行號(hào)、舊數(shù)據(jù)、新數(shù)據(jù)和處理時(shí)間。否則一旦用戶反饋數(shù)據(jù)不對(duì),很難追溯。

從辦公自動(dòng)化角度看,這類腳本非常適合作為“批量數(shù)據(jù)修正模板”。后續(xù)可以繼續(xù)擴(kuò)展成帶界面的小工具,讓用戶選擇目標(biāo)文件夾、輸入舊行和新行、選擇工作表名稱,再自動(dòng)生成替換日志。這樣才算真正從讀書筆記走向可交付工具。

以上就是Python批量替換Excel多個(gè)工作簿的行數(shù)據(jù)的詳細(xì)內(nèi)容,更多關(guān)于Python批量替換Excel行數(shù)據(jù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • PyCharm License Activation激活碼失效問題的解決方法(圖文詳解)

    PyCharm License Activation激活碼失效問題的解決方法(圖文詳解)

    這篇文章主要介紹了PyCharm License Activation激活碼失效問題的解決方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Python使用asyncio.Queue進(jìn)行任務(wù)調(diào)度的實(shí)現(xiàn)

    Python使用asyncio.Queue進(jìn)行任務(wù)調(diào)度的實(shí)現(xiàn)

    本文主要介紹了Python使用asyncio.Queue進(jìn)行任務(wù)調(diào)度的實(shí)現(xiàn),它可以用于任務(wù)調(diào)度和數(shù)據(jù)交換,文中通過示例代碼介紹的非常詳細(xì),感興趣的可以了解一下
    2024-02-02
  • python實(shí)現(xiàn)簡單五子棋小游戲

    python實(shí)現(xiàn)簡單五子棋小游戲

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡單五子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Linux 修改Python命令的方法示例

    Linux 修改Python命令的方法示例

    這篇文章主要介紹了Linux 修改Python命令的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • Python利用lxml庫實(shí)現(xiàn)XML處理

    Python利用lxml庫實(shí)現(xiàn)XML處理

    lxml庫是Python中處理XML和HTML文檔的強(qiáng)大庫,提供了豐富的API以進(jìn)行各種操作,本文將討論如何使用lxml庫,包括如何創(chuàng)建XML文檔,如何使用XPath查詢,以及如何解析大型XML文檔,需要的可以參考下
    2023-08-08
  • python-str,list,set間的轉(zhuǎn)換實(shí)例

    python-str,list,set間的轉(zhuǎn)換實(shí)例

    今天小編就為大家分享一篇python-str,list,set間的轉(zhuǎn)換實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python?multiprocessing.value實(shí)現(xiàn)多進(jìn)程數(shù)據(jù)共享的示例

    Python?multiprocessing.value實(shí)現(xiàn)多進(jìn)程數(shù)據(jù)共享的示例

    本文介紹了Python中的multiprocessing.value,通過示例代碼展示了如何使用這個(gè)類實(shí)現(xiàn)多進(jìn)程數(shù)據(jù)共享,以及使用場(chǎng)景和注意事項(xiàng)等內(nèi)容,感興趣的朋友跟隨小編一起看看吧
    2023-07-07
  • Python圖算法實(shí)例分析

    Python圖算法實(shí)例分析

    這篇文章主要介紹了Python圖算法,結(jié)合實(shí)例形式詳細(xì)分析了Python數(shù)據(jù)結(jié)構(gòu)與算法中的圖算法實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-08-08
  • 3種適用于Python的瘋狂秘密武器及原因解析

    3種適用于Python的瘋狂秘密武器及原因解析

    這篇文章主要介紹了3種適用于Python的瘋狂秘密武器,本文給大家分享問題原因解析,通過實(shí)例代碼圖文的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Python 計(jì)算機(jī)視覺編程進(jìn)階之OpenCV 進(jìn)行霍夫變換

    Python 計(jì)算機(jī)視覺編程進(jìn)階之OpenCV 進(jìn)行霍夫變換

    霍夫變換(Hough)是一個(gè)非常重要的檢測(cè)間斷點(diǎn)邊界形狀的方法。它通過將圖像坐標(biāo)空間變換到參數(shù)空間,來實(shí)現(xiàn)直線與曲線的擬合,通過本篇文章我們來詳細(xì)了解它
    2021-11-11

最新評(píng)論

庆安县| 孙吴县| 嘉定区| 壶关县| 鄂托克前旗| 城固县| 安多县| 巴彦淖尔市| 宣城市| 新余市| 万山特区| 安多县| 长乐市| 安顺市| 济源市| 澎湖县| 库伦旗| 丘北县| 宁津县| 晋城| 南通市| 嘉峪关市| 资源县| 永年县| 赤水市| 朝阳县| 陈巴尔虎旗| 巴楚县| 洛川县| 海门市| 温泉县| 慈溪市| 磴口县| 呼和浩特市| 茶陵县| 中卫市| 开原市| 宜丰县| 高雄市| 土默特右旗| 连州市|