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

Python使用Tkinter+openpyxl處理Excel文件并顯示實(shí)時(shí)進(jìn)度條

 更新時(shí)間:2026年01月05日 08:54:13   作者:weixin_46244623  
在項(xiàng)目開(kāi)發(fā)或數(shù)據(jù)處理中,經(jīng)常需要批量處理 Excel 文件,本文將分析如何使用 openpyxl 正確處理合并單元格并將單元格轉(zhuǎn)為字符串,同時(shí)結(jié)合 Tkinter 實(shí)現(xiàn)帶進(jìn)度條的圖形界面實(shí)時(shí)顯示處理進(jìn)度,感興趣的小伙伴可以了解下

在項(xiàng)目開(kāi)發(fā)或數(shù)據(jù)處理中,經(jīng)常需要批量處理 Excel 文件,例如將所有單元格的值強(qiáng)制轉(zhuǎn)換為字符串(特別是處理合并單元格時(shí),避免讀取到 None)。如果文件行數(shù)較多,處理時(shí)間較長(zhǎng),用戶很容易誤以為程序卡死。這時(shí),添加一個(gè)實(shí)時(shí)進(jìn)度條就能極大提升用戶體驗(yàn)。

本文分享一個(gè)完整示例:使用 openpyxl 正確處理合并單元格并將單元格轉(zhuǎn)為字符串,同時(shí)結(jié)合 Tkinter 實(shí)現(xiàn)帶進(jìn)度條的圖形界面,實(shí)時(shí)顯示處理進(jìn)度、當(dāng)前工作表和已處理行數(shù)。

環(huán)境準(zhǔn)備

pip install openpyxl

Tkinter 是 Python 標(biāo)準(zhǔn)庫(kù),無(wú)需額外安裝。

完整代碼

import tkinter as tk
from tkinter import ttk
import openpyxl

def update_progress(progress_var, processed, total):
    """更新進(jìn)度條百分比"""
    if total > 0:
        progress = (processed / total) * 100
        progress_var.set(progress)

def process_sheet(sheet, progress_var, root, progress_label, accumulated_rows, total_all_rows):
    """
    處理單個(gè)工作表
    正確處理合并單元格,將所有單元格值轉(zhuǎn)換為字符串
    """
    current_processed = 0  # 當(dāng)前工作表已處理行數(shù)

    for row in sheet.iter_rows():
        for cell in row:
            # 判斷是否在合并單元格內(nèi)
            if cell.coordinate in sheet.merged_cells:
                # 查找對(duì)應(yīng)的合并區(qū)域,取出左上角單元格的值
                for merged_range in sheet.merged_cells.ranges:
                    if cell.coordinate in merged_range:
                        top_left = sheet.cell(merged_range.min_row, merged_range.min_col)
                        value = top_left.value
                        break
            else:
                value = cell.value

            # 統(tǒng)一轉(zhuǎn)為字符串,None 轉(zhuǎn)為空字符串
            cell.value = str(value) if value is not None else ''

        current_processed += 1
        total_processed = accumulated_rows + current_processed

        # 更新進(jìn)度條和文字
        update_progress(progress_var, total_processed, total_all_rows)
        progress_label.config(
            text=f"正在處理工作表:{sheet.title}  "
                 f"進(jìn)度:{progress_var.get():.2f}%  "
                 f"已處理行數(shù):{total_processed}/{total_all_rows}"
        )
        root.update_idletasks()  # 強(qiáng)制刷新界面

    return accumulated_rows + current_processed

if __name__ == "__main__":
    # 請(qǐng)修改為你的實(shí)際 Excel 文件路徑
    file_path = "output_file.xlsx"

    workbook = openpyxl.load_workbook(file_path)

    # 計(jì)算所有工作表的總行數(shù),用于整體進(jìn)度顯示
    total_all_rows = sum(sheet.max_row for sheet in workbook.worksheets)

    # 創(chuàng)建主窗口
    root = tk.Tk()
    root.title("Excel 單元格轉(zhuǎn)字符串工具(帶進(jìn)度條)")
    root.geometry("600x200")
    root.resizable(False, False)

    # 進(jìn)度變量
    progress_var = tk.DoubleVar(value=0)

    # 標(biāo)題
    title_label = tk.Label(root, text="正在處理 Excel 文件,請(qǐng)稍候...", font=("微軟雅黑", 12))
    title_label.pack(pady=20)

    # 進(jìn)度條
    progress_bar = ttk.Progressbar(root, mode="determinate", variable=progress_var, maximum=100)
    progress_bar.pack(padx=50, pady=10, fill=tk.X)

    # 進(jìn)度文字
    progress_label = tk.Label(root, text="進(jìn)度:0.00%  已處理行數(shù):0/0", font=("微軟雅黑", 10))
    progress_label.pack(pady=5)

    accumulated_rows = 0  # 已累計(jì)處理行數(shù)

    # 逐個(gè)處理工作表
    for sheet_name in workbook.sheetnames:
        sheet = workbook[sheet_name]
        accumulated_rows = process_sheet(
            sheet, progress_var, root, progress_label, accumulated_rows, total_all_rows
        )

    # 處理完成
    progress_var.set(100)
    title_label.config(text="所有工作表處理完成!")
    progress_label.config(text=f"處理完成!100.00%  總計(jì)處理行數(shù):{total_all_rows}/{total_all_rows}")

    # 保存文件
    workbook.save(file_path)
    print(f"處理完成,文件已保存:{file_path}")

    # 保持窗口打開(kāi),直到用戶手動(dòng)關(guān)閉
    root.mainloop()

核心功能詳解

合并單元格正確處理:合并區(qū)域內(nèi)除左上角外的單元格讀取時(shí)會(huì)返回 None,代碼通過(guò)遍歷 merged_cells.ranges 找到對(duì)應(yīng)區(qū)域的左上角值,確保數(shù)據(jù)不丟失。

實(shí)時(shí)進(jìn)度條:每處理完一行就調(diào)用 root.update_idletasks() 強(qiáng)制刷新界面,讓進(jìn)度條和文字實(shí)時(shí)更新,視覺(jué)反饋流暢。

多工作表整體進(jìn)度:預(yù)先統(tǒng)計(jì)所有 sheet 的總行數(shù),實(shí)現(xiàn)整個(gè)文件的統(tǒng)一進(jìn)度顯示,同時(shí)顯示當(dāng)前正在處理的工作表名稱。

使用注意事項(xiàng)

  • 對(duì)于超大 Excel 文件(數(shù)十萬(wàn)行),每行都刷新界面可能會(huì)略微影響性能??筛臑槊?10 行或 50 行更新一次。
  • 處理前建議備份原文件,以防萬(wàn)一。
  • 本例將所有值強(qiáng)制轉(zhuǎn)為字符串(包括數(shù)字、日期等),如有特殊需求可自行調(diào)整轉(zhuǎn)換邏輯。

總結(jié)

通過(guò) Tkinteropenpyxl 的結(jié)合,我們輕松實(shí)現(xiàn)了一個(gè)帶圖形化進(jìn)度條的 Excel 處理工具,用戶體驗(yàn)友好,代碼清晰易擴(kuò)展。后續(xù)還可以加入文件選擇對(duì)話框、日志輸出、錯(cuò)誤處理等功能。

到此這篇關(guān)于Python使用Tkinter+openpyxl處理Excel文件并顯示實(shí)時(shí)進(jìn)度條的文章就介紹到這了,更多相關(guān)Python處理Excel文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python 中開(kāi)發(fā)pattern的string模板(template) 實(shí)例詳解

    Python 中開(kāi)發(fā)pattern的string模板(template) 實(shí)例詳解

    這篇文章主要介紹了Python 中開(kāi)發(fā)pattern的string模板(template) 實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • python修改文件內(nèi)容的3種方法詳解

    python修改文件內(nèi)容的3種方法詳解

    這篇文章主要介紹了python修改文件內(nèi)容的3種方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • python 同時(shí)讀取多個(gè)文件的例子

    python 同時(shí)讀取多個(gè)文件的例子

    今天小編就為大家分享一篇python 同時(shí)讀取多個(gè)文件的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • 如何在python中處理配置文件代碼實(shí)例

    如何在python中處理配置文件代碼實(shí)例

    這篇文章主要介紹了如何在python中處理配置文件代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • PyQt5實(shí)現(xiàn)五子棋游戲(人機(jī)對(duì)弈)

    PyQt5實(shí)現(xiàn)五子棋游戲(人機(jī)對(duì)弈)

    這篇文章主要為大家詳細(xì)介紹了PyQt5實(shí)現(xiàn)五子棋游戲,人機(jī)對(duì)弈,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 詳解numpy.meshgrid()方法使用

    詳解numpy.meshgrid()方法使用

    這篇文章主要介紹了詳解numpy.meshgrid()方法使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • python web框架 django wsgi原理解析

    python web框架 django wsgi原理解析

    這篇文章主要介紹了python web框架 django wsgi原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值
    2019-08-08
  • python中tkinter窗口位置\坐標(biāo)\大小等實(shí)現(xiàn)示例

    python中tkinter窗口位置\坐標(biāo)\大小等實(shí)現(xiàn)示例

    這篇文章主要介紹了python中tkinter窗口位置\坐標(biāo)\大小等實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Python中的int32與int64區(qū)別及說(shuō)明

    Python中的int32與int64區(qū)別及說(shuō)明

    本文介紹了Python原生int為動(dòng)態(tài)精度類型,無(wú)固定位寬;NumPy的int32、int64為定長(zhǎng)整數(shù),分別占用4字節(jié)和8字節(jié),適用于不同內(nèi)存和性能場(chǎng)景,在數(shù)組和科學(xué)計(jì)算中更高效
    2025-10-10
  • python讀取文件列表并排序的實(shí)現(xiàn)示例

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

    本文主要介紹了python讀取文件列表并排序的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07

最新評(píng)論

城市| 昌平区| 阳江市| 大港区| 长葛市| 始兴县| 神农架林区| 禄丰县| 墨江| 贵溪市| 资源县| 漳浦县| 赤水市| 镇平县| 专栏| 竹溪县| 贵南县| 南溪县| 浦东新区| 成安县| 黄冈市| 奉贤区| 枞阳县| 拜城县| 彰武县| 辽阳县| 淮阳县| 仁寿县| 观塘区| 永平县| 高邑县| 旌德县| 泗水县| 稻城县| 防城港市| 南涧| 科技| 灵台县| 台南市| 高要市| 太仆寺旗|