使用Python+Tkinter+openpyxl实现Excel文本化转换

Written by

in

文章目录
  • 程序运行时会弹出一个包含进度条的窗口: 每处理一行数据会实时更新进度条 显示百分比 显示已处理的行数 整个文件转换完成后,自动保存回原文件
  • import tkinter as tk from tkinter import ttk import openpyxl def update_progress(progress_var, total_rows_processed, total_rows): “”” 更新进度条百分比 progress_var: Tkinter 进度变量 total_rows_processed: 已处理行数 total_rows: 总行数 “”” progress = total_rows_processed / total_rows * 100 progress_var.set(progress) def process_sheet(sheet, progress_var, root, progress_label): “”” 处理单个 Sheet,将所有单元格转为字符串格式, 并处理合并单元格的值获取。 sheet: 要处理的工作表 progress_var: Tkinter 进度变量 root: Tkinter 主窗口(用于刷新界面) progress_label: 进度文本标签 “”” total_rows_processed = 0 # 已处理行数 total_rows = sheet.max_row # 当前 sheet 的行数 # 遍历所有行 for row in sheet.iter_rows(): # 遍历行内所有单元格 for cell in row: # 判断单元格是否属于合并单元格 if cell.coordinate in sheet.merged_cells: # 获取该单元格所属合并区域 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 else: # 非合并单元格直接取值 value = cell.value # 将单元格内容强制转换为字符串 cell.value = str(value) # 该行处理完成 total_rows_processed += 1 # 更新进度条显示 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() # 强制刷新界面 if __name__ == “__main__”: file_path = “output_file.xlsx” # Excel 文件路径 workbook = openpyxl.load_workbook(file_path) # 创建 Tkinter GUI 窗口 root = tk.Tk() root.title(“Excel 文本化转换(含进度条)”) root.geometry(“500×300″) # 进度条变量 progress_var = tk.DoubleVar(value=0) # 进度条控件 progress_bar = ttk.Progressbar(root, mode=”determinate”, variable=progress_var, maximum=100) progress_bar.pack(pady=10) # 显示文本的标签 progress_label = tk.Label(root, text=”Progress: 0.00%, Rows Processed: 0″) progress_label.pack(pady=5) total_rows_processed = 0 # 总计处理行数 # 遍历所有 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()
  • 本文介绍了如何通过 Python、Tkinter 和 openpyxl: 批量处理 Excel 文件 自动识别并处理合并单元格 转换所有内容为字符串 实时显示处理进度 适用于数据清洗、办公自动化、ETL、批处理等场景。 以上就是使用Python + Tkinter + openpyxl实现Excel文本化转换的详细内容,更多关于Python Excel文本化转换的资料请关注风君子博客其它相关文章! 您可能感兴趣的文章: Python3使用win32com从Excel读取数据生成Word格式报告批量发邮件的示例详解 Python基于PyQt5和openpyxl实现Excel单元格合并工具 使用Python对Excel表内容进行中文提取的示例代码 使用Python删除Excel单元格公式并保留数值 Python实现自动化操作Excel的方法详解
  • 目录
    • 实现效果
    • 完整代码(含详细中文注释)
    • 代码讲解
      • 1. 处理合并单元格
      • 2. Tkinter 实现进度条与刷新界面
      • 3. 将所有单元格转换为字符串
    • 总结

      在实际开发中,我们经常需要将 Excel 中的所有数据转换为字符串格式,尤其是处理包含 合并单元格 的复杂表格时。如果处理的数据量较大,程序运行会比较慢,这时若能看到实时进度条,就能更直观地了解处理进度。

      本文将介绍一个使用 Python + Tkinter + openpyxl 开发的小工具,实现以下功能:

      • 将 Excel 中所有单元格内容转换为文本
      • 自动处理合并单元格(取合并区左上角的值)
      • Tkinter GUI 显示实时进度条
      • 显示处理行数及百分比
      • 批量处理多个 Sheet

      非常适合 Excel 批处理、数据清洗、自动化办公开发者。

      程序运行时会弹出一个包含进度条的窗口:

      • 每处理一行数据会实时更新进度条
      • 显示百分比
      • 显示已处理的行数
      • 整个文件转换完成后,自动保存回原文件

      import tkinter as tk
      from tkinter import ttk
      import openpyxl
       
      def update_progress(progress_var, total_rows_processed, total_rows):
          """
          更新进度条百分比
          progress_var: Tkinter 进度变量
          total_rows_processed: 已处理行数
          total_rows: 总行数
          """
          progress = total_rows_processed / total_rows * 100
          progress_var.set(progress)
       
      def process_sheet(sheet, progress_var, root, progress_label):
          """
          处理单个 Sheet,将所有单元格转为字符串格式,
          并处理合并单元格的值获取。
          sheet: 要处理的工作表
          progress_var: Tkinter 进度变量
          root: Tkinter 主窗口(用于刷新界面)
          progress_label: 进度文本标签
          """
       
          total_rows_processed = 0          # 已处理行数
          total_rows = sheet.max_row       # 当前 sheet 的行数
       
          # 遍历所有行
          for row in sheet.iter_rows():
              # 遍历行内所有单元格
              for cell in row:
                  # 判断单元格是否属于合并单元格
                  if cell.coordinate in sheet.merged_cells:
                      # 获取该单元格所属合并区域
                      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
                  else:
                      # 非合并单元格直接取值
                      value = cell.value
       
                  # 将单元格内容强制转换为字符串
                  cell.value = str(value)
       
              # 该行处理完成
              total_rows_processed += 1
       
              # 更新进度条显示
              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()  # 强制刷新界面
       
      if __name__ == "__main__":
       
          file_path = "output_file.xlsx"  # Excel 文件路径
          workbook = openpyxl.load_workbook(file_path)
       
          # 创建 Tkinter GUI 窗口
          root = tk.Tk()
          root.title("Excel 文本化转换(含进度条)")
          root.geometry("500x300")
       
          # 进度条变量
          progress_var = tk.DoubleVar(value=0)
       
          # 进度条控件
          progress_bar = ttk.Progressbar(root, mode="determinate",
                                         variable=progress_var, maximum=100)
          progress_bar.pack(pady=10)
       
          # 显示文本的标签
          progress_label = tk.Label(root, text="Progress: 0.00%, Rows Processed: 0")
          progress_label.pack(pady=5)
       
          total_rows_processed = 0  # 总计处理行数
       
          # 遍历所有 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()

      openpyxl 中判断单元格是否属于合并区域可以直接这样写:

      if cell.coordinate in sheet.merged_cells:

      获取合并区域左上角单元格:

      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

      核心调用:

      root.update_idletasks()

      能保证界面实时更新,否则 Tkinter 会卡住直到任务完成才渲染 UI。

      非常简单:

      cell.value = str(value)

      本文介绍了如何通过 Python、Tkinter 和 openpyxl:

      • 批量处理 Excel 文件
      • 自动识别并处理合并单元格
      • 转换所有内容为字符串
      • 实时显示处理进度

      适用于数据清洗、办公自动化、ETL、批处理等场景。

      以上就是使用Python + Tkinter + openpyxl实现Excel文本化转换的详细内容,更多关于Python Excel文本化转换的资料请关注风君子博客其它相关文章!

      您可能感兴趣的文章:

      • Python3使用win32com从Excel读取数据生成Word格式报告批量发邮件的示例详解
      • Python基于PyQt5和openpyxl实现Excel单元格合并工具
      • 使用Python对Excel表内容进行中文提取的示例代码
      • 使用Python删除Excel单元格公式并保留数值
      • Python实现自动化操作Excel的方法详解

      站内搜索