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

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

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

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

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

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

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

實(shí)現(xiàn)效果

程序運(yùn)行時(shí)會(huì)彈出一個(gè)包含進(jìn)度條的窗口:

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

完整代碼(含詳細(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):
    """
    處理單個(gè) 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  # 總計(jì)處理行數(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 實(shí)現(xiàn)進(jìn)度條與刷新界面

核心調(diào)用:

root.update_idletasks()

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

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

非常簡(jiǎn)單:

cell.value = str(value)

總結(jié)

本文介紹了如何通過(guò) Python、Tkinter 和 openpyxl:

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

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

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

相關(guān)文章

  • 跟老齊學(xué)Python之玩轉(zhuǎn)字符串(1)

    跟老齊學(xué)Python之玩轉(zhuǎn)字符串(1)

    本文主要講訴了字符串的定義,變量鏈接到字符串,以及對(duì)字符串的簡(jiǎn)單操作,都是些非?;A(chǔ)的東西,適合零基礎(chǔ)的Pythoner學(xué)習(xí),覺(jué)得有用的話,多鼓鼓掌吧
    2014-09-09
  • Python多線程下載文件的方法

    Python多線程下載文件的方法

    這篇文章主要介紹了Python多線程下載文件的方法,涉及Python多線程及文件操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • 人生苦短我用python python如何快速入門?

    人生苦短我用python python如何快速入門?

    這篇文章主要教大家如何快速入門python,一個(gè)簡(jiǎn)短而全面的入門教程帶你走入Python的大門,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Python實(shí)現(xiàn)快速掃描目標(biāo)主機(jī)的開放端口和服務(wù)

    Python實(shí)現(xiàn)快速掃描目標(biāo)主機(jī)的開放端口和服務(wù)

    這篇文章主要為大家詳細(xì)介紹了如何使用Python編寫一個(gè)功能強(qiáng)大的端口掃描器腳本,實(shí)現(xiàn)快速掃描目標(biāo)主機(jī)的開放端口和服務(wù),感興趣的小伙伴可以了解下
    2025-12-12
  • python消除序列的重復(fù)值并保持順序不變的實(shí)例

    python消除序列的重復(fù)值并保持順序不變的實(shí)例

    今天小編就為大家分享一篇python消除序列的重復(fù)值并保持順序不變的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • Python元類與迭代器生成器案例詳解

    Python元類與迭代器生成器案例詳解

    這篇文章主要介紹了Python元類與迭代器生成器案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • python中Flask?Web?表單的使用方法介紹

    python中Flask?Web?表單的使用方法介紹

    這篇文章主要介紹了python中Flask?Web?表單的使用方法介紹,表單的操作是Web程序開發(fā)中最核心的模塊之一,絕大多數(shù)的動(dòng)態(tài)交互功能都是通過(guò)表單的形式實(shí)現(xiàn)的。更多介紹需要的小伙伴可以參考下面文章內(nèi)容
    2022-05-05
  • Python 安裝setuptools和pip工具操作方法(必看)

    Python 安裝setuptools和pip工具操作方法(必看)

    下面小編就為大家?guī)?lái)一篇Python 安裝setuptools和pip工具操作方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • python數(shù)據(jù)處理實(shí)戰(zhàn)(必看篇)

    python數(shù)據(jù)處理實(shí)戰(zhàn)(必看篇)

    下面小編就為大家?guī)?lái)一篇python數(shù)據(jù)處理實(shí)戰(zhàn)(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • python GUI庫(kù)圖形界面開發(fā)之PyQt5窗口類QMainWindow詳細(xì)使用方法

    python GUI庫(kù)圖形界面開發(fā)之PyQt5窗口類QMainWindow詳細(xì)使用方法

    這篇文章主要介紹了python GUI庫(kù)圖形界面開發(fā)之PyQt5窗口類QMainWindow詳細(xì)使用方法,需要的朋友可以參考下
    2020-02-02

最新評(píng)論

浙江省| 高平市| 长海县| 西充县| 云安县| 文登市| 铁力市| 沁源县| 溆浦县| 云安县| 奇台县| 灵丘县| 淮阳县| 龙江县| 桦川县| 雅江县| 双辽市| 伊宁县| 宜兴市| 木兰县| 得荣县| 南宫市| 镇雄县| 红河县| 全州县| 灵丘县| 长乐市| 监利县| 天台县| 亚东县| 清河县| 新宾| 辽阳县| 沂南县| 平潭县| 宝清县| 岢岚县| 穆棱市| 葵青区| 静海县| 门头沟区|