python 图形界面多个WORD按名字排序合并成一个WORD

python 复制代码
import wx
import os
import re
import datetime  # 导入时间模块,用于生成时间格式文件名
import win32com.client as win32
from docx import Document
from natsort import natsorted  # 导入自然排序库,解决数字文件名乱序问题

class MyFrame(wx.Frame):
    def __init__(self, parent, title):
        super(MyFrame, self).__init__(parent, title=title, size=(400, 200))
        panel = wx.Panel(self)
        
        self.dir_picker = wx.DirPickerCtrl(panel, style=wx.DIRP_DIR_MUST_EXIST)
        self.btn_merge = wx.Button(panel, label='合并')
        
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(wx.StaticText(panel, label='选择要合并的文件夹:'), 0, wx.ALL, 5)
        sizer.Add(self.dir_picker, 0, wx.EXPAND|wx.ALL, 5)
        sizer.Add(self.btn_merge, 0, wx.ALIGN_CENTER|wx.ALL, 5)
        
        panel.SetSizer(sizer)
        self.Bind(wx.EVT_BUTTON, self.on_merge, self.btn_merge)
    def natural_sort_key(self, filename):
        #自定义自然排序键,支持中英文、数字混合文件名排序"""​
        # 分离文件名中的数字和非数字部分,用于精准排序​
        parts = re.split('(\d+)', filename)
        # 数字部分转为整数,非数字部分保留字符串,实现自然排序​
        return [int(part) if part.isdigit() else part.lower() for part in parts] 
     
    def on_merge(self, event):
        folder_path = self.dir_picker.GetPath()
        if not os.path.exists(folder_path):
            wx.MessageBox('指定的文件夹不存在!', '错误', wx.OK | wx.ICON_ERROR)
            return
        
        try:
           merged_doc = Document()  # 创建新文档
           # 筛选出文件夹中的docx文件,并按自然排序排列
           docx_files = [f for f in os.listdir(folder_path) if f.lower().endswith(".docx")]
           # 两种排序方式可选,推荐自然排序(适配数字文件名)
           # 方式1:自然排序(需安装natsort库,更精准)
           sorted_files = natsorted(docx_files)
            # 方式2:自定义自然排序(无需额外安装库,适配大部分场景)
            # sorted_files = sorted(docx_files, key=self.natural_sort_key)
           if not sorted_files:
              wx.MessageBox('文件夹中无DOCX文件可合并!', '提示', wx.OK | wx.ICON_INFORMATION)
              return
           for filename in sorted_files:
                file_path = os.path.join(folder_path, filename)
                doc = Document(file_path)
                # 为每个文件添加标题(可选,便于区分不同文件内容)
                merged_doc.add_heading(filename, level=2)
                # 复制每个段落到合并文档,保留原格式
                for paragraph in doc.paragraphs:
                    new_para = merged_doc.add_paragraph()
                    for run in paragraph.runs:
                         new_run = new_para.add_run(run.text)
                         new_run.bold = run.bold
                         new_run.italic = run.italic
                         new_run.underline = run.underline
                         new_run.font.name = run.font.name
                         new_run.font.size = run.font.size
                         new_run.font.color.rgb = run.font.color.rgb
                # 每个文件结束后添加分页符(可选,避免内容粘连)
                merged_doc.add_page_break()
           current_time = datetime.datetime.now().strftime("%Y%m%d%H%M%S%f")[:-3]  # 截取前17位,去掉微秒后3位,保留毫秒
           # 优化导出文件名,拼接时间戳,避免重复
           merged_filename = f'合并后的文档_{current_time}.docx'
           # 保存合并后的文件,路径改为与源文件夹同目录,便于查找
           merged_path = os.path.join(folder_path, merged_filename)
           merged_doc.save(merged_path)
           wx.MessageBox(f'合并完成!{merged_filename}文件保存至:\n{merged_path}', '成功', wx.OK | wx.ICON_INFORMATION)
        except Exception as e:
            wx.MessageBox(f'合并过程中发生错误:{str(e)}', '错误', wx.OK | wx.ICON_ERROR)
app = wx.App()
frame = MyFrame(None, 'DOC文件合并')
frame.Show()
app.MainLoop()

摘要:该代码实现了一个DOCX文档合并工具,使用wxPython创建GUI界面。主要功能包括:1) 选择文件夹路径并自动识别所有DOCX文件;2) 采用自然排序算法(natsorted)处理文件名;3) 保留原文档格式(字体、颜色等样式)合并内容;4) 自动添加分页符和文件名标题;5) 生成带时间戳的合并文件。程序具有错误处理机制,支持中英文和数字混合文件名的精准排序,最终将合并文档保存在原文件夹中。

相关推荐
AI探索者9 小时前
LangGraph StateGraph 实战:状态机聊天机器人构建指南
python
AI探索者9 小时前
LangGraph 入门:构建带记忆功能的天气查询 Agent
python
FishCoderh11 小时前
Python自动化办公实战:批量重命名文件,告别手动操作
python
躺平大鹅11 小时前
Python函数入门详解(定义+调用+参数)
python
曲幽12 小时前
我用FastAPI接ollama大模型,差点被asyncio整崩溃(附对话窗口实战)
python·fastapi·web·async·httpx·asyncio·ollama
Scout-leaf12 小时前
WPF新手村教程(三)—— 路由事件
c#·wpf
用户2986985301415 小时前
程序员效率工具:Spire.Doc如何助你一键搞定Word表格排版
后端·c#·.net
两万五千个小时15 小时前
落地实现 Anthropic Multi-Agent Research System
人工智能·python·架构
哈里谢顿18 小时前
Python 高并发服务限流终极方案:从原理到生产落地(2026 实战指南)
python
用户8356290780511 天前
无需 Office:Python 批量转换 PPT 为图片
后端·python