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

Python實(shí)現(xiàn)拆分合并Excel單元格并自動(dòng)填充原左上角數(shù)據(jù)

 更新時(shí)間:2026年07月15日 08:32:07   作者:幸福清風(fēng)  
還在手動(dòng)拆分Excel合并單元格并逐個(gè)填充數(shù)據(jù)嗎,本文教你用Python自動(dòng)化處理:自動(dòng)拆分所有合并區(qū)域,填充左上角原值,并完美復(fù)制字體、邊框、對(duì)齊等樣式,無視覺變化,告別重復(fù)勞動(dòng),大幅提升報(bào)表清洗效率,適合財(cái)務(wù)、生產(chǎn)、統(tǒng)計(jì)類報(bào)表

日常工作中處理Excel報(bào)表經(jīng)常遇到合并單元格問題:

  1. 合并單元格導(dǎo)出數(shù)據(jù)后,只有左上角有數(shù)值,其余空白,做統(tǒng)計(jì)、匹配時(shí)會(huì)缺失數(shù)據(jù);
  2. 手動(dòng)拆分合并單元格后,需要復(fù)制左上角值填充整段區(qū)域,表格量大時(shí)重復(fù)操作效率極低;
  3. 拆分后單元格樣式錯(cuò)亂,字體、對(duì)齊、邊框需要手動(dòng)重新調(diào)整。

本文基于openpyxl實(shí)現(xiàn)一套通用工具函數(shù):自動(dòng)讀取Excel所有合并區(qū)域,拆分單元格后將原合并區(qū)域全部填充左上角原值,同時(shí)同步復(fù)制字體、邊框、填充色、對(duì)齊等單元格樣式,無需手動(dòng)二次美化,完美適配財(cái)務(wù)、生產(chǎn)、統(tǒng)計(jì)類報(bào)表。

一、工具優(yōu)勢(shì)

  1. 提前緩存全部合并區(qū)域,避免拆分后丟失合并范圍信息;
  2. 拆分后整塊區(qū)域統(tǒng)一填充左上角原始數(shù)值;
  3. 完整復(fù)制原單元格樣式,表格視覺無變化;
  4. 支持自定義工作表、自定義輸出路徑,可覆蓋原文件或生成新文件;
  5. 純本地處理,無需依賴在線表格API,Windows/macOS通用。

二、環(huán)境依賴

僅需安裝openpyxl庫,用于讀寫.xlsx格式Excel文件:

pip install openpyxl

三、完整可運(yùn)行代碼

from openpyxl import load_workbook
from copy import copy

def unmerge_merged_cells_fill_all(file_path, sheet_name="Sheet1", output_path=None):
    """
    Excel拆分合并單元格,拆分后原合并區(qū)域的所有單元格全部填充原左上角的值
    :param file_path: str 輸入Excel文件完整路徑
    :param sheet_name: str 目標(biāo)工作表名稱,默認(rèn)Sheet1
    :param output_path: str 輸出文件路徑,不傳則直接覆蓋原文件
    :return: str 處理完成后的文件路徑
    """
    # 1. 加載工作簿,保留表格原有全部格式樣式
    wb = load_workbook(file_path)
    ws = wb[sheet_name]

    # 2. 提前讀取所有合并單元格區(qū)域(關(guān)鍵:拆分后無法獲取合并范圍,必須先緩存)
    merged_ranges = list(ws.merged_cells.ranges)
    if not merged_ranges:
        print("當(dāng)前工作表未檢測(cè)到任何合并單元格,無需執(zhí)行處理")
        return

    # 3. 循環(huán)處理每一塊合并區(qū)域
    for m_range in merged_ranges:
        # 獲取合并區(qū)域邊界:起始行、結(jié)束行、起始列、結(jié)束列
        min_row = m_range.min_row
        max_row = m_range.max_row
        min_col = m_range.min_col
        max_col = m_range.max_col
        # 獲取合并區(qū)域左上角單元格與原始數(shù)值
        top_left_cell = ws.cell(row=min_row, column=min_col)
        top_left_value = top_left_cell.value

        # 拆分當(dāng)前合并單元格
        ws.unmerge_cells(range_string=str(m_range))

        # 遍歷原合并區(qū)域內(nèi)所有單元格,統(tǒng)一填充左上角值并復(fù)制樣式
        for row in range(min_row, max_row + 1):
            for col in range(min_col, max_col + 1):
                current_cell = ws.cell(row=row, column=col)
                # 填充數(shù)值
                current_cell.value = top_left_value
                # 復(fù)制左上角單元格全套樣式,保證表格美觀不混亂
                current_cell.font = copy(top_left_cell.font)
                current_cell.fill = copy(top_left_cell.fill)
                current_cell.border = copy(top_left_cell.border)
                current_cell.alignment = copy(top_left_cell.alignment)
                current_cell.number_format = top_left_cell.number_format

    # 4. 文件保存邏輯
    if output_path is None:
        output_path = file_path
    wb.save(output_path)
    print(f"處理完成!共拆分 {len(merged_ranges)} 個(gè)合并單元格區(qū)域,文件保存路徑:{output_path}")
    return output_path

# ===================== 調(diào)用示例 =====================
if __name__ == "__main__":
    # Windows本地文件路徑,r字符串避免轉(zhuǎn)義符報(bào)錯(cuò)
    input_file = r"C:\Users\Administrator\Desktop\cs11.xlsx"
    # 方式1:直接覆蓋原文件
    unmerge_merged_cells_fill_all(input_file)

    # 方式2:生成新文件,不修改原文件(取消注釋使用)
    # new_file = r"C:\Users\Administrator\Desktop\cs11_處理后.xlsx"
    # unmerge_merged_cells_fill_all(input_file, output_path=new_file)

四、核心邏輯分步講解

1. 預(yù)讀取全部合并區(qū)域(最關(guān)鍵一步)

openpyxl拆分單元格后,工作表會(huì)丟失合并區(qū)域記錄,因此必須先循環(huán)讀取所有合并范圍存入列表,再進(jìn)行拆分操作。

merged_ranges = list(ws.merged_cells.ranges)

2. 獲取合并區(qū)域左上角數(shù)據(jù)

每個(gè)合并區(qū)域只有左上角單元格存儲(chǔ)有效值,拆分后其余單元格會(huì)變成空白,所以先提前讀取數(shù)值:

top_left_cell = ws.cell(row=min_row, column=min_col)
top_left_value = top_left_cell.value

3. 拆分單元格+批量填充

調(diào)用unmerge_cells拆分,雙層循環(huán)遍歷原合并區(qū)域所有行列,統(tǒng)一賦值左上角數(shù)值。

4. 樣式同步復(fù)制

使用copy()復(fù)制字體、背景填充、邊框、對(duì)齊、數(shù)字格式,解決拆分后表格樣式錯(cuò)亂問題:

current_cell.font = copy(top_left_cell.font)
current_cell.fill = copy(top_left_cell.fill)
current_cell.border = copy(top_left_cell.border)
current_cell.alignment = copy(top_left_cell.alignment)
current_cell.number_format = top_left_cell.number_format

五、兩種使用方式說明

方式1:覆蓋原Excel文件

直接傳入文件路徑,不指定output_path,處理完成后覆蓋原文件:

input_file = r"C:\Users\Administrator\Desktop\cs11.xlsx"
unmerge_merged_cells_fill_all(input_file)

方式2:輸出新文件,保留原始數(shù)據(jù)

指定輸出路徑,生成全新文件,原文件不受修改,適合需要備份原始報(bào)表場(chǎng)景:

input_file = r"C:\Users\Administrator\Desktop\cs11.xlsx"
output_file = r"C:\Users\Administrator\Desktop\cs11_拆分填充后.xlsx"
unmerge_merged_cells_fill_all(input_file, output_path=output_file)

六、適用場(chǎng)景與擴(kuò)展改造

適用場(chǎng)景

  1. 生產(chǎn)月度匯總表、年度統(tǒng)計(jì)報(bào)表(多行多列合并);
  2. 財(cái)務(wù)臺(tái)賬、項(xiàng)目臺(tái)賬導(dǎo)出后數(shù)據(jù)清洗;
  3. 數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫前預(yù)處理,消除空白單元格;
  4. pandas讀取Excel前統(tǒng)一規(guī)整數(shù)據(jù),避免空值干擾統(tǒng)計(jì)。

擴(kuò)展改造思路

  1. 結(jié)合pandas向右填充空白:拆分合并單元格后,增加循環(huán)邏輯,按年月分區(qū)向右填充剩余空白單元格;
  2. 批量處理文件夾所有Excel:搭配os遍歷文件夾,批量拆分所有表格合并單元格;
  3. 過濾指定工作表:增加判斷,跳過不需要處理的Sheet;
  4. 導(dǎo)出日志記錄:統(tǒng)計(jì)每個(gè)文件拆分的合并區(qū)域數(shù)量,生成處理日志txt。

七、常見問題解決

路徑報(bào)錯(cuò):Unicode轉(zhuǎn)義 Windows路徑前面加r原始字符串,避免\轉(zhuǎn)義:

input_file = r"C:\Users\Administrator\Desktop\cs11.xlsx"

文件占用無法保存 關(guān)閉Excel軟件后再運(yùn)行代碼,Excel打開時(shí)會(huì)鎖定文件寫入權(quán)限。

不支持.xls舊格式 openpyxl僅支持.xlsx,舊xls文件先用Excel另存為xlsx再處理。

無合并單元格無輸出 代碼內(nèi)置判斷,無合并區(qū)域會(huì)直接打印提示并退出,不會(huì)生成空白文件。

八、總結(jié)

這套工具函數(shù)解決了Excel合并單元格拆分后數(shù)據(jù)缺失的痛點(diǎn),自動(dòng)化填充數(shù)據(jù)+同步樣式,幾十行代碼替代大量手動(dòng)重復(fù)操作,適合數(shù)據(jù)分析、財(cái)務(wù)、運(yùn)營人員日常報(bào)表清洗。代碼封裝完整、注釋清晰,可直接復(fù)制使用,也能根據(jù)自身業(yè)務(wù)需求二次擴(kuò)展。

以上就是Python實(shí)現(xiàn)拆分合并Excel單元格并自動(dòng)填充原左上角數(shù)據(jù)的詳細(xì)內(nèi)容,更多關(guān)于Python處理Excel單元格的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python Numpy庫datetime類型的處理詳解

    Python Numpy庫datetime類型的處理詳解

    這篇文章主要介紹了Python Numpy庫datetime類型的處理詳解,Python中自帶的處理時(shí)間的模塊就有time 、datetime、calendar,另外還有擴(kuò)展的第三方庫,如dateutil等等。。當(dāng)我們用NumPy庫做數(shù)據(jù)分析時(shí),如何轉(zhuǎn)換時(shí)間呢?需要的朋友可以參考下
    2019-07-07
  • 推薦10款最受Python開發(fā)者歡迎的Python IDE

    推薦10款最受Python開發(fā)者歡迎的Python IDE

    這篇文章收集了一些對(duì)開發(fā)者非常有幫助的,最好的10款Python IDE,包括Vim,Eclipse with PyDev,Sublime Text,PyCharm等知明Python開發(fā)工具
    2018-09-09
  • python讀取文件列表并排序的實(shí)現(xiàn)示例

    python讀取文件列表并排序的實(shí)現(xiàn)示例

    本文主要介紹了python讀取文件列表并排序的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • python不使用for計(jì)算兩組、多個(gè)矩形兩兩間的iou方式

    python不使用for計(jì)算兩組、多個(gè)矩形兩兩間的iou方式

    今天小編就為大家分享一篇python不使用for計(jì)算兩組、多個(gè)矩形兩兩間的iou方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • 關(guān)于Pyinstaller閃退的補(bǔ)救措施

    關(guān)于Pyinstaller閃退的補(bǔ)救措施

    這篇文章主要介紹了關(guān)于Pyinstaller閃退的補(bǔ)救措施,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python操作文件的參數(shù)整理

    python操作文件的參數(shù)整理

    在本篇文章中我們給大家總結(jié)了關(guān)于python操作文件的相關(guān)參數(shù)以及用法內(nèi)容,需要的朋友們學(xué)習(xí)下。
    2019-06-06
  • python內(nèi)存管理機(jī)制原理詳解

    python內(nèi)存管理機(jī)制原理詳解

    這篇文章主要介紹了python內(nèi)存管理機(jī)制原理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • python人物視頻背景替換實(shí)現(xiàn)虛擬空間穿梭

    python人物視頻背景替換實(shí)現(xiàn)虛擬空間穿梭

    這篇文章主要為大家介紹了python實(shí)現(xiàn)人物視頻背景替換示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • jupyter notebook 增加kernel教程

    jupyter notebook 增加kernel教程

    這篇文章主要介紹了jupyter notebook 增加kernel教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 教你怎么用python實(shí)現(xiàn)字符串轉(zhuǎn)日期

    教你怎么用python實(shí)現(xiàn)字符串轉(zhuǎn)日期

    今天教各位小伙伴怎么用python實(shí)現(xiàn)字符串轉(zhuǎn)日期,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴很有幫助,需要的朋友可以參考下
    2021-05-05

最新評(píng)論

廉江市| 台江县| 汉中市| 许昌县| 固始县| 通化市| 茶陵县| 页游| 邢台县| 林西县| 陈巴尔虎旗| 永嘉县| 正阳县| 祥云县| 兰州市| 黑龙江省| 北海市| 定西市| 依兰县| 南木林县| 乐山市| 深州市| 留坝县| 长泰县| 邢台市| 福海县| 斗六市| 时尚| 宣汉县| 慈溪市| 泽库县| 新安县| 米易县| 铁岭县| 东安县| 厦门市| 额敏县| 芒康县| 盐城市| 桦甸市| 临武县|