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

使用Python + Tkinter + openpyxl實現(xiàn)Excel文本化轉(zhuǎn)換

 更新時間:2025年12月04日 09:41:17   作者:weixin_46244623  
在實際開發(fā)中,我們經(jīng)常需要將 Excel 中的所有數(shù)據(jù)轉(zhuǎn)換為字符串格式,尤其是處理包含 合并單元格 的復(fù)雜表格時,所以本文將介紹如何使用 Python + Tkinter + openpyxl實現(xiàn)Excel文本化轉(zhuǎn)換,需要的朋友可以參考下

在實際開發(fā)中,我們經(jīng)常需要將 Excel 中的所有數(shù)據(jù)轉(zhuǎn)換為字符串格式,尤其是處理包含 合并單元格 的復(fù)雜表格時。如果處理的數(shù)據(jù)量較大,程序運行會比較慢,這時若能看到實時進(jìn)度條,就能更直觀地了解處理進(jìn)度。

本文將介紹一個使用 Python + Tkinter + openpyxl 開發(fā)的小工具,實現(xiàn)以下功能:

  • 將 Excel 中所有單元格內(nèi)容轉(zhuǎn)換為文本
  • 自動處理合并單元格(取合并區(qū)左上角的值)
  • Tkinter GUI 顯示實時進(jìn)度條
  • 顯示處理行數(shù)及百分比
  • 批量處理多個 Sheet

非常適合 Excel 批處理、數(shù)據(jù)清洗、自動化辦公開發(fā)者。

實現(xiàn)效果

程序運行時會彈出一個包含進(jìn)度條的窗口:

  • 每處理一行數(shù)據(jù)會實時更新進(jìn)度條
  • 顯示百分比
  • 顯示已處理的行數(shù)
  • 整個文件轉(zhuǎn)換完成后,自動保存回原文件

完整代碼(含詳細(xì)中文注釋)

import tkinter as tk
from tkinter import ttk
import openpyxl
 
def update_progress(progress_var, total_rows_processed, total_rows):
    """
    更新進(jìn)度條百分比
    progress_var: Tkinter 進(jìn)度變量
    total_rows_processed: 已處理行數(shù)
    total_rows: 總行數(shù)
    """
    progress = total_rows_processed / total_rows * 100
    progress_var.set(progress)
 
def process_sheet(sheet, progress_var, root, progress_label):
    """
    處理單個 Sheet,將所有單元格轉(zhuǎn)為字符串格式,
    并處理合并單元格的值獲取。
    sheet: 要處理的工作表
    progress_var: Tkinter 進(jìn)度變量
    root: Tkinter 主窗口(用于刷新界面)
    progress_label: 進(jìn)度文本標(biāo)簽
    """
 
    total_rows_processed = 0          # 已處理行數(shù)
    total_rows = sheet.max_row       # 當(dāng)前 sheet 的行數(shù)
 
    # 遍歷所有行
    for row in sheet.iter_rows():
        # 遍歷行內(nèi)所有單元格
        for cell in row:
            # 判斷單元格是否屬于合并單元格
            if cell.coordinate in sheet.merged_cells:
                # 獲取該單元格所屬合并區(qū)域
                merged_range = sheet.merged_cells[cell.coordinate]
                # 獲取合并單元格左上角坐標(biāo)
                top_left_cell = merged_range.min_row, merged_range.min_col
                # 取左上角單元格的值
                value = sheet.cell(*top_left_cell).value
            else:
                # 非合并單元格直接取值
                value = cell.value
 
            # 將單元格內(nèi)容強(qiáng)制轉(zhuǎn)換為字符串
            cell.value = str(value)
 
        # 該行處理完成
        total_rows_processed += 1
 
        # 更新進(jìn)度條顯示
        update_progress(progress_var, total_rows_processed, total_rows)
        progress_label.config(
            text=f"Progress: {progress_var.get():.2f}%, Rows Processed: {total_rows_processed}/{total_rows}"
        )
        root.update_idletasks()  # 強(qiáng)制刷新界面
 
if __name__ == "__main__":
 
    file_path = "output_file.xlsx"  # Excel 文件路徑
    workbook = openpyxl.load_workbook(file_path)
 
    # 創(chuàng)建 Tkinter GUI 窗口
    root = tk.Tk()
    root.title("Excel 文本化轉(zhuǎn)換(含進(jìn)度條)")
    root.geometry("500x300")
 
    # 進(jìn)度條變量
    progress_var = tk.DoubleVar(value=0)
 
    # 進(jìn)度條控件
    progress_bar = ttk.Progressbar(root, mode="determinate",
                                   variable=progress_var, maximum=100)
    progress_bar.pack(pady=10)
 
    # 顯示文本的標(biāo)簽
    progress_label = tk.Label(root, text="Progress: 0.00%, Rows Processed: 0")
    progress_label.pack(pady=5)
 
    total_rows_processed = 0  # 總計處理行數(shù)
 
    # 遍歷所有 Sheet 逐一處理
    for sheet_name in workbook.sheetnames:
        sheet = workbook[sheet_name]
        total_rows = sheet.max_row
        process_sheet(sheet, progress_var, root, progress_label)
        total_rows_processed += total_rows
 
    # 所有 Sheet 處理完畢,顯示 100%
    update_progress(progress_var, total_rows_processed, total_rows_processed)
    progress_label.config(
        text=f"Progress: 100.00%, Rows Processed: {total_rows_processed}/{total_rows_processed}"
    )
    root.update_idletasks()
 
    # 保存修改
    workbook.save(file_path)
 
    # 顯示完成界面
    root.mainloop()

代碼講解

1. 處理合并單元格

openpyxl 中判斷單元格是否屬于合并區(qū)域可以直接這樣寫:

if cell.coordinate in sheet.merged_cells:

獲取合并區(qū)域左上角單元格:

merged_range = sheet.merged_cells[cell.coordinate] top_left_cell = merged_range.min_row, merged_range.min_col value = sheet.cell(*top_left_cell).value

2. Tkinter 實現(xiàn)進(jìn)度條與刷新界面

核心調(diào)用:

root.update_idletasks()

能保證界面實時更新,否則 Tkinter 會卡住直到任務(wù)完成才渲染 UI。

3. 將所有單元格轉(zhuǎn)換為字符串

非常簡單:

cell.value = str(value)

總結(jié)

本文介紹了如何通過 Python、Tkinter 和 openpyxl:

  • 批量處理 Excel 文件
  • 自動識別并處理合并單元格
  • 轉(zhuǎn)換所有內(nèi)容為字符串
  • 實時顯示處理進(jìn)度

適用于數(shù)據(jù)清洗、辦公自動化、ETL、批處理等場景。

以上就是使用Python + Tkinter + openpyxl實現(xiàn)Excel文本化轉(zhuǎn)換的詳細(xì)內(nèi)容,更多關(guān)于Python Excel文本化轉(zhuǎn)換的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

磐石市| 忻城县| 龙陵县| 浦江县| 乌拉特中旗| 鄂温| 泊头市| 水富县| 崇左市| 逊克县| 山西省| 武山县| 剑阁县| 平阳县| 甘泉县| 竹山县| 迭部县| 衡山县| 新竹市| 江阴市| 兴宁市| 武邑县| 岳阳县| 德昌县| 陇南市| 新沂市| 永康市| 闵行区| 宁都县| 沾化县| 驻马店市| 桓仁| 禄劝| 瑞安市| 崇义县| 临湘市| 汕头市| 南雄市| 长兴县| 海安县| 定兴县|