SuperAPI AI 工具集

docx

办公与效率

查看项目

更新于 10-16 04:39

技能介绍

DOCX 是一套面向 .docx 文件的创建、编辑与分析技能。.docx 本质上是一个 ZIP 归档,内部包含 XML 文件和其他资源,因此可以通过读取和编辑这些内容来完成各类文档任务。技能针对不同任务提供了不同的工具与工作流。

一、用途与工作流选择 技能提供一棵工作流决策树:读取或分析内容时,使用文本提取或原始 XML 访问;创建新文档时,使用“创建新 Word 文档”工作流;编辑现有文档时,若为自己文档且改动简单,使用“基础 OOXML 编辑”工作流;若为他人文档,推荐使用 redlining 工作流;若涉及法律、学术、商业或政府文档,则必须使用 redlining 工作流。

二、读取与分析内容

  1. 文本提取:若只需读取文档文本内容,可用 pandoc 将文档转换为 markdown,它能较好地保留文档结构并显示修订。命令示例:pandoc --track-changes=all path-to-file.docx -o output.md,其中 --track-changes 可选 accept/reject/all。
  2. 原始 XML 访问:处理批注、复杂格式、文档结构、嵌入媒体和元数据时,需要解包文档并读取原始 XML。解包命令:python ooxml/scripts/unpack.py <office_file> <output_directory>。关键文件结构包括 word/document.xml(主文档内容)、word/comments.xml(document.xml 中引用的批注)、word/media/(嵌入图片和媒体文件);修订使用 <w:ins>(插入)和 <w:del>(删除)标签。

三、创建新 Word 文档 从零创建 Word 文档时使用 docx-js,可用 JavaScript/TypeScript 创建文档。工作流要求:必须完整阅读 docx-js.md(约 500 行),从头到尾读完,不得设置任何范围限制;然后使用 Document、Paragraph、TextRun 组件创建 JavaScript/TypeScript 文件;最后用 Packer.toBuffer() 导出为 .docx。

四、编辑现有 Word 文档 编辑现有文档时使用 Document 库(一个用于 OOXML 操作的 Python 库),它自动处理基础设施并提供文档操作方法,复杂场景可直接访问底层 DOM。工作流要求:必须完整阅读 ooxml.md(约 600 行),不得设置范围限制;解包文档:python ooxml/scripts/unpack.py <office_file> <output_directory>;使用 Document 库创建并运行 Python 脚本;最后打包:python ooxml/scripts/pack.py <input_directory> <office_file>。

五、文档审阅的 Redlining 工作流 该工作流允许先用 markdown 规划完整的修订,再在 OOXML 中实现。关键要求:为实现完整修订,必须系统性地实施所有变更。批处理策略:将相关变更分组为每批 3-10 个,便于调试并保持效率,每批测试后再进行下一批。核心原则是最小、精确编辑:只标记实际变化的文本,重复未变文本会让审阅更困难且显得不专业。替换应拆分为 [未变文本] + [删除] + [插入] + [未变文本],并通过提取原始 <w:r> 元素复用其 RSID 来保留未变文本。资料给出了“30 days”改为“60 days”的正反示例。

修订工作流步骤:

  1. 获取 markdown 表示:pandoc --track-changes=all path-to-file.docx -o current.md。
  2. 识别并分组变更:找出所有需要的变更并组织为逻辑批次。定位方法包括章节/标题编号、段落标识、带唯一上下文的 grep 模式、文档结构;不要使用 markdown 行号,因为它们不映射到 XML 结构。批次可按章节、类型、复杂度或顺序组织。
  3. 阅读文档并解包:必须完整阅读 ooxml.md,特别注意“Document Library”和“Tracked Change Patterns”部分;解包文档;注意解包脚本建议的 RSID 并在后续使用。
  4. 分批实施变更:按逻辑分组,在单个脚本中一起实现。对每批相关变更:a. 将文本映射到 XML:在 word/document.xml 中 grep 文本,确认文本如何拆分到 <w:r> 元素;b. 创建并运行脚本:用 get_node 查找节点、实施变更,然后 doc.save()。注意每次写脚本前都要立即 grep word/document.xml 以获取当前行号并验证文本内容,因为每次脚本运行后行号会变化。
  5. 打包文档:python ooxml/scripts/pack.py unpacked reviewed-document.docx。
  6. 最终验证:将最终文档转为 markdown,验证所有变更是否正确应用,检查是否引入意外变更。

六、将文档转换为图片 为可视化分析 Word 文档,采用两步:先用 soffice --headless --convert-to pdf document.docx 将 DOCX 转为 PDF;再用 pdftoppm -jpeg -r 150 document.pdf page 将 PDF 页面转为 JPEG 图片,生成 page-1.jpg、page-2.jpg 等。选项包括 -r 150 设置分辨率、-jpeg 输出格式(也可用 -png)、-f N 起始页、-l N 结束页、page 为输出文件前缀。示例:pdftoppm -jpeg -r 150 -f 2 -l 5 document.pdf page 仅转换第 2-5 页。

七、代码风格与依赖 生成 DOCX 操作代码时应简洁,避免冗长变量名和冗余操作,避免不必要的 print 语句。所需依赖(如未安装则安装):pandoc(sudo apt-get install pandoc,用于文本提取)、docx(npm install -g docx,用于创建新文档)、LibreOffice(sudo apt-get install libreoffice,用于 PDF 转换)、Poppler(sudo apt-get install poppler-utils,用于 pdftoppm 转图片)、defusedxml(pip install defusedxml,用于安全 XML 解析)。

八、工作流总结与检查点 资料末尾给出 DOCX v1.1 工作流总结:来源为 ISO/IEC 29500(OOXML)与 Python-docx。阶段 1 分析(读取模式):用 pandoc 提取文本内容并转为 markdown;解包以查看 XML 结构。阶段 2 修改(写入模式):以修订格式(<w:ins>、<w:del>)进行 redlining;在解包目录上运行脚本,保持一致性,避免手动编辑 XML;将文件夹重新打包为 .docx。检查点包括:生成的 docx 能否被 Word 无错打开;修订是否正确显示(可接受/拒绝);XML 验证(schema check)是否通过。