使用Python实现自动编写Word全自动化系统

这篇文章主要介绍了如何使用Python中的python-docx实现自动编写word文档;感兴趣的小伙伴可以一块学习一下!

目录

一、引言:

二、系统介绍

1、根据模板新建Word

2、样式迁移

三、使用场景

四、核心代码部分

1、执行功能

五、项目运行

六、源码获取


一、引言:

工作中有大量的报告编写需求,在不停地复制粘贴之后,突然想到,这种高度重复的工作有没有编程可以实现的方法呢?

经过查找相关内容发现一个关键词叫做RPA(流程自动化,各位去搜索一下这个关键词,会发现和我想要实现的需求完全一致,只是这个词一般在财务金融之类的环境中提起)。

那么python可以实现RPA吗?继续搜索发现有很多包,这里介绍一下python-docx,一个用来生成Word文档的包。

二、系统介绍

1、根据模板新建Word

由 Markdown 生成初稿 Word(可清空模板,仅保留封面);

2、样式迁移

将已有 Word(或初稿)迁移到目标模板并统一样式 ;

三、使用场景

我们学生在写做毕设论文时,有模板不想自己写Word怎么办;

工作时,整理word文档抓耳挠腮怎么办;

这时候我们的Word全自动化系统v1.0就出现了;界面如下:

功能1:我们上传一个模板,然后选择------AI帮我们写好的md格式的文档;然后再点击保存为选择一个保存路径,这样我们就生成了一个符合模板格式的Word文档文件。

功能2:我们上传一个模板,然后选择我们需要转换样式的源Word;然后样式映射是自动选填的,我们再选择一个输出路径;给我们转换后的Word文档起一个名字;点击执行功能2,这样我们转换的Word文档就成功了。

四、核心代码部分

1、执行功能

python 复制代码
     def _run_feature1(self):
        try:
            tpl = self.template_path.get().strip()
            md = self.md_path.get().strip()
            outp = self.out_new_path.get().strip()
            if not tpl or not Path(tpl).exists():
                messagebox.showwarning("提示", "请先选择模板 .docx")
                return
            if not md or not Path(md).exists():
                messagebox.showwarning("提示", "请先选择 Markdown 文件")
                return
            Path(outp).parent.mkdir(parents=True, exist_ok=True)

            python_exe = self._resolve_python()
            self._ensure_deps(python_exe)
            script_dir = Path(__file__).resolve().parent
            args = [python_exe, str((script_dir / "assemble.py").resolve()) ,
                    "--md", md, "--ref", tpl, "--out", outp]
            if self.clear_template.get():
                args.append("--clear-template")
            if self.keep_cover.get():
                args.append("--keep-cover")
            if self.apply_normal.get():
                args.append("--apply-normal")
            args.append("--verbose")

            self._log("运行: " + " ".join(args))
            # 强制使用 UTF-8 读取子进程输出,避免 Windows 下 cp936/gbk 解码报错
            completed = subprocess.run(
                args,
                capture_output=True,
                text=True,
                encoding="utf-8",
                errors="replace",
            )
            if completed.stdout:
                self._log(completed.stdout)
            if completed.returncode != 0 and completed.stderr:
                self._log(completed.stderr)
                messagebox.showerror("失败", "功能1执行失败,请查看日志")
                return
            messagebox.showinfo("完成", f"已生成: {outp}")
        except Exception as exc:
            self._log(str(exc))
            messagebox.showerror("异常", str(exc))
python 复制代码
    def _run_feature2(self):
        try:
            tpl = self.template_path.get().strip()
            src = self.migrate_src_path.get().strip()
            mapf = self.migrate_map_path.get().strip()
            outp = self.migrate_out_path.get().strip()
            if not tpl or not Path(tpl).exists():
                messagebox.showwarning("提示", "请先选择模板 .docx")
                return
            if not src or not Path(src).exists():
                messagebox.showwarning("提示", "请选择需要调整的目标 Word 文件")
                return
            if not mapf or not Path(mapf).exists():
                messagebox.showwarning("提示", "请选择样式映射 YAML (style_map.yaml)")
                return
            Path(outp).parent.mkdir(parents=True, exist_ok=True)

            # 目前使用 assemble.py 的"清空+保留封面+不写入内容"的方式导出空白文档再复制样式;
            # 或者直接调用 migrate_template.py,假设该脚本已支持 --src --tpl --out
            python_exe = self._resolve_python()
            self._ensure_deps(python_exe)
            script_dir = Path(__file__).resolve().parent
            script = (script_dir / "migrate_template.py").resolve()
            if script.exists():
                args = [python_exe, str(script), "--src", src, "--tpl", tpl, "--map", mapf, "--out", outp]
                if self.clear_template.get():
                    args.append("--clear-template")
                if self.keep_cover.get():
                    args.append("--keep-cover")
                if self.apply_normal.get():
                    args.append("--apply-normal")
            else:
                messagebox.showwarning("提示", "migrate_template.py 不存在,无法执行功能2")
                return
            self._log("运行: " + " ".join(args))
            completed = subprocess.run(
                args,
                capture_output=True,
                text=True,
                encoding="utf-8",
                errors="replace",
            )
            if completed.stdout:
                self._log(completed.stdout)
            if completed.returncode != 0 and completed.stderr:
                self._log(completed.stderr)
                messagebox.showerror("失败", "功能2执行失败,请查看日志")
                return
            messagebox.showinfo("完成", f"已输出: {outp}")
        except Exception as exc:
            self._log(str(exc))
            messagebox.showerror("异常", str(exc))

五、项目运行

首先安装Python 3.10+;然后导入我们的源码到Python编辑器;点击绿色三角箭头运行即可;

六、源码获取

关注GZH:小猿讲编程;输入"python全自动化系统"即可获取。

相关推荐
Brilliantwxx2 小时前
【Linux】 进程(9)程序与进程地址空间(基础+进阶+面试题)
linux·运维·服务器·开发语言·c++
richdata3 小时前
商品数字化不是先做大数据,而是先把数据变成可用决策
大数据·运维·数据治理·商品数字化·智能补货·ai商品决策
傲笑风4 小时前
【openvino】tinybert基于openvino服务化部署(四)
人工智能·python·自然语言处理·nlp·bert·openvino
weixin_416667964 小时前
【无标题】
运维·服务器·网络
维基框架4 小时前
WIKI 知识库 v1.1.1 正式发布
人工智能·python
一池秋_4 小时前
arm低配linux设备,桌面应用冷启动提速方法
linux·运维·arm开发
上海云盾-小余6 小时前
流量攻击复盘:为什么 WAF 完好,业务依旧瘫痪
运维·服务器·网络
IT大白鼠6 小时前
Docker 私有仓库管理:Harbor 企业级仓库搭建与镜像全生命周期管理
运维·docker·容器
戴西软件6 小时前
戴西iDWS.3DViz Suite数据轻量化可视化软件,从传统桌面软件向云端协同的重大突破
大数据·运维·网络·人工智能·机器学习·3d
我命由我123457 小时前
Linux - Linux/POSIX 路径斜杠折叠规则
linux·运维·服务器·android studio·android jetpack·android-studio·android runtime