Word 文档格式处理 使用 python-docx 库精确操作 Word 文档格式,适用于格式分析、格式规范化、批量修改。 核心规则 被调用时立即执行 : 1. 确认文件路径 :询问用户 Word 文档的完整路径 2. 明确需求 :确认是分析格式还是修改格式,目标规范是什么 3. 选择模板 :根据需求选择合适的代码模板或脚本 4. 生成脚本 :创建独立的 Python 脚本文件 5. 执行验证 :使用 执行并检查结果 强制性约束 : - ✓ 必须使用 - ✓ 必须处理 和 (文档正文常在表格内) - ✓ 必须分设 中英文字体(使用 ) - ✓ 必须询问 用户文件路径和输出路径 - ✗ 禁止使用 直接 命令(缺少依赖) - ✗ 禁止遗漏 表格内容处理(常见错误) 何时使用 触发场景 : - 分析 Word 文档格式(字体/字号/缩进/行距) - 批量修改文档格式 - 统一排版规范(学术论文、报告等) - 处理中英文混排字体 - 修改交叉引用/参考文献样式 触发关键词 :修改 Word 格式、统一字体、调整缩进、分析文档格式、参考文献格式 决策树 快速开始 基础模板 快速模板:批量格式化 快速模板:参考文献处理 执行检查清单 生成脚本前 : - [ ] 已确认用户提供的文件路径 - [ ] 已明确目标格式规范 - [ ] 已选择合适的模板或脚本 脚本中必须包含 : - [ ] 同时…

, line):\n table_lines.append(line)\n i += 1\n\n if not table_lines:\n return start_idx\n\n rows = []\n for line in table_lines:\n cells = [cell.strip() for cell in line.split('|')[1:-1]]\n rows.append(cells)\n\n if rows:\n table = doc.add_table(rows=len(rows), cols=len(rows[0]))\n\n # 设置表格边框为实线黑色 0.5 磅\n from docx.oxml import OxmlElement\n tbl = table._tbl\n tblPr = tbl.tblPr\n if tblPr is None:\n tblPr = OxmlElement('w:tblPr')\n tbl.insert(0, tblPr)\n\n tblBorders = OxmlElement('w:tblBorders')\n for border_name in ['top', 'left', 'bottom', 'right', 'insideH', 'insideV']:\n border = OxmlElement(f'w:{border_name}')\n border.set(qn('w:val'), 'single')\n border.set(qn('w:sz'), '4') # 0.5磅 = 4/8磅\n border.set(qn('w:color'), '000000')\n tblBorders.append(border)\n tblPr.append(tblBorders)\n\n # 填充表格内容\n for row_idx, row_data in enumerate(rows):\n for col_idx, cell_text in enumerate(row_data):\n cell = table.rows[row_idx].cells[col_idx]\n para = cell.paragraphs[0]\n para.alignment = WD_ALIGN_PARAGRAPH.CENTER\n add_text_with_formatting(para, cell_text, cn='宋体', en='Times New Roman', size=10.5)\n\n return i - 1\n\n\ndef parse_markdown(md_file, doc):\n \"\"\"解析 Markdown 文件\"\"\"\n with open(md_file, 'r', encoding='utf-8') as f:\n lines = f.readlines()\n\n i = 0\n prev_type = None # 跟踪上一个段落类型\n prev_level = -1 # 跟踪上一个列表的缩进级别\n\n while i \u003c len(lines):\n line = lines[i].rstrip()\n\n # 空行跳过\n if not line:\n prev_type = 'empty'\n i += 1\n continue\n\n # 分隔线跳过\n if line.strip() == '---':\n prev_type = 'separator'\n i += 1\n continue\n\n # 标题(从长到短匹配)\n if line.startswith('#### '):\n add_heading(doc, line[5:], 4)\n prev_type = 'heading'\n elif line.startswith('### '):\n add_heading(doc, line[4:], 3)\n prev_type = 'heading'\n elif line.startswith('## '):\n add_heading(doc, line[3:], 2)\n prev_type = 'heading'\n elif line.startswith('# '):\n add_heading(doc, line[2:], 1)\n prev_type = 'heading'\n\n # 表格\n elif line.startswith('|'):\n i = add_table(doc, lines, i)\n prev_type = 'table'\n\n # 任务列表(- [ ] 或 - [x])\n elif re.match(r'^\\s*-\\s+\\[([ xX])\\]\\s+', line):\n text = re.sub(r'^\\s*-\\s+\\[([ xX])\\]\\s+', '', line)\n indent_level = (len(line) - len(line.lstrip())) // 2\n add_list_item(doc, text, ordered=False, level=indent_level)\n prev_type = 'list_bullet'\n prev_level = indent_level\n\n # 无序列表(支持缩进)\n elif re.match(r'^\\s*[-*]\\s+', line):\n indent_level = (len(line) - len(line.lstrip())) // 2\n text = re.sub(r'^\\s*[-*]\\s+', '', line)\n add_list_item(doc, text, ordered=False, level=indent_level)\n prev_type = 'list_bullet'\n prev_level = indent_level\n\n # 有序列表(支持缩进)\n elif re.match(r'^\\s*\\d+\\.\\s', line):\n indent_level = (len(line) - len(line.lstrip())) // 2\n # 提取序号\n match = re.match(r'^\\s*(\\d+)\\.\\s', line)\n number = int(match.group(1))\n text = re.sub(r'^\\s*\\d+\\.\\s', '', line)\n # 使用原始序号\n add_list_item(doc, text, ordered=True, level=indent_level, number=number)\n prev_type = 'list_number'\n prev_level = indent_level\n\n # 代码块(跳过)\n elif line.startswith('```'):\n i += 1\n while i \u003c len(lines) and not lines[i].startswith('```'):\n i += 1\n prev_type = 'code'\n\n # 正文\n else:\n add_paragraph(doc, line)\n prev_type = 'paragraph'\n\n i += 1\n\n\ndef main():\n if len(sys.argv) != 3:\n print(\"使用方法: python3 md_to_docx.py input.md output.docx\")\n sys.exit(1)\n\n input_file = sys.argv[1]\n output_file = sys.argv[2]\n\n doc = Document()\n parse_markdown(input_file, doc)\n doc.save(output_file)\n\n print(f\"✓ 转换完成: {input_file} -> {output_file}\")\n\n\nif __name__ == '__main__':\n main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":8736,"content_sha256":"1e2b484b14a681f5987f8b20c522bbdaf62ec9bc8a39a385ea7c2d26d3d36e78"},{"filename":"STANDARDS.md","content":"# 默认格式标准\n\n本文档定义了 Word 文档的默认格式标准,包括中国公文格式和学术论文格式。\n\n## 中国公文格式标准(GB/T 9704-2012)\n\n| 元素 | 中文字体 | 英文字体 | 字号 | 行距 | 段前 | 段后 | 首行缩进 | 对齐 |\n|------|---------|---------|------|------|------|------|---------|------|\n| 文档标题 | 方正小标宋简体 | Arial Black | 二号(22pt) | 1.5倍 | 0 | 18pt | 无 | 居中 |\n| 一级标题 | 黑体 | Arial | 三号(16pt) | 1.5倍 | 12pt | 6pt | 无 | 左对齐 |\n| 二级标题 | 黑体 | Arial | 小三(15pt) | 1.5倍 | 6pt | 6pt | 无 | 左对齐 |\n| 三级标题 | 黑体 | Arial | 四号(14pt) | 1.5倍 | 6pt | 6pt | 无 | 左对齐 |\n| 正文 | 仿宋_GB2312 | Times New Roman | 三号(16pt) | 固定28pt | 0 | 0 | 2字符(32pt) | 两端对齐 |\n| 表格标题 | 黑体 | Arial | 五号(10.5pt) | 单倍 | 6pt | 6pt | 无 | 居中 |\n| 表格内容 | 仿宋_GB2312 | Times New Roman | 五号(10.5pt) | 单倍 | 0 | 0 | 无 | 居中 |\n\n**关键要求**:\n- 正文必须使用仿宋_GB2312,三号字\n- 行距必须是固定值28磅(不是1.5倍)\n- 首行缩进2字符(三号字为32pt)\n\n## 学术论文格式标准\n\n| 元素 | 中文字体 | 英文字体 | 字号 | 行距 | 段前 | 段后 | 首行缩进 | 对齐 |\n|------|---------|---------|------|------|------|------|---------|------|\n| 论文标题 | 黑体 | Arial Black | 小二(18pt) | 1.5倍 | 0 | 18pt | 无 | 居中 |\n| 一级标题 | 黑体 | Arial | 小三(15pt) | 1.5倍 | 12pt | 6pt | 无 | 居中 |\n| 二级标题 | 黑体 | Arial | 四号(14pt) | 1.5倍 | 6pt | 6pt | 无 | 左对齐 |\n| 三级标题 | 黑体 | Arial | 小四(12pt) | 1.5倍 | 6pt | 6pt | 无 | 左对齐 |\n| 正文 | 宋体 | Times New Roman | 小四(12pt) | 1.5倍 | 0 | 0 | 2字符(24pt) | 两端对齐 |\n| 表格标题 | 黑体 | Arial | 五号(10.5pt) | 单倍 | 6pt | 6pt | 无 | 居中 |\n| 表格内容 | 宋体 | Times New Roman | 五号(10.5pt) | 单倍 | 0 | 0 | 无 | 居中 |\n| 图片说明 | 宋体 | Times New Roman | 五号(10.5pt) | 单倍 | 6pt | 12pt | 无 | 居中 |\n| 参考文献 | 宋体 | Times New Roman | 五号(10.5pt) | 单倍 | 0 | 0 | 悬挂(-21pt) | 两端对齐 |\n\n**关键要求**:\n- 正文使用宋体,小四字(12pt)\n- 行距1.5倍\n- 首行缩进2字符(小四字为24pt)\n- 参考文献使用悬挂缩进\n\n## 参数速查表\n\n### 字号对照\n\n| 中文名称 | 磅值(pt) | 代码 | 常用场景 |\n|---------|---------|------|---------|\n| 初号 | 42 | `Pt(42)` | 封面大标题 |\n| 小初 | 36 | `Pt(36)` | 封面标题 |\n| 一号 | 26 | `Pt(26)` | 章标题 |\n| 小一 | 24 | `Pt(24)` | 章标题 |\n| 二号 | 22 | `Pt(22)` | 文档标题 |\n| 小二 | 18 | `Pt(18)` | 论文标题 |\n| 三号 | 16 | `Pt(16)` | 公文正文、一级标题 |\n| 小三 | 15 | `Pt(15)` | 二级标题 |\n| 四号 | 14 | `Pt(14)` | 三级标题 |\n| 小四 | 12 | `Pt(12)` | 学术论文正文 |\n| 五号 | 10.5 | `Pt(10.5)` | 表格内容、脚注 |\n| 小五 | 9 | `Pt(9)` | 页眉页脚 |\n\n### 首行缩进对照\n\n| 字号 | 2字符缩进 | 代码 |\n|------|----------|------|\n| 三号(16pt) | 32pt | `Pt(32)` |\n| 小三(15pt) | 30pt | `Pt(30)` |\n| 四号(14pt) | 28pt | `Pt(28)` |\n| 小四(12pt) | 24pt | `Pt(24)` |\n| 五号(10.5pt) | 21pt | `Pt(21)` |\n\n**计算公式**:2字符缩进 = 字号(pt) × 2\n\n### 行距设置\n\n| 行距类型 | 代码 | 说明 |\n|---------|------|------|\n| 单倍行距 | `para.paragraph_format.line_spacing = 1.0` | 默认 |\n| 1.5倍行距 | `para.paragraph_format.line_spacing = 1.5` | 学术论文常用 |\n| 2倍行距 | `para.paragraph_format.line_spacing = 2.0` | 草稿 |\n| 固定值28磅 | `para.paragraph_format.line_spacing = Pt(28)` | 公文标准 |\n\n**注意**:公文必须使用固定值28磅,不能使用倍数行距。\n\n### 对齐方式\n\n| 对齐方式 | 代码 | 数值 | 常用场景 |\n|---------|------|------|---------|\n| 左对齐 | `WD_ALIGN_PARAGRAPH.LEFT` | 0 | 标题、列表 |\n| 居中 | `WD_ALIGN_PARAGRAPH.CENTER` | 1 | 文档标题、表格标题 |\n| 右对齐 | `WD_ALIGN_PARAGRAPH.RIGHT` | 2 | 日期、签名 |\n| 两端对齐 | `WD_ALIGN_PARAGRAPH.JUSTIFY` | 3 | 正文(推荐) |\n| 分散对齐 | `WD_ALIGN_PARAGRAPH.DISTRIBUTE` | 4 | 特殊需求 |\n\n### 段前段后间距\n\n| 间距 | 代码 | 说明 |\n|------|------|------|\n| 无间距 | `Pt(0)` | 正文段落 |\n| 6磅 | `Pt(6)` | 标题段后 |\n| 12磅 | `Pt(12)` | 一级标题段前 |\n| 18磅 | `Pt(18)` | 文档标题段后 |\n| 1行(12pt) | `Pt(12)` | 相当于1行间距 |\n\n### 常用颜色\n\n| 颜色 | RGB值 | 代码 | 用途 |\n|------|-------|------|------|\n| 黑色 | (0, 0, 0) | `RGBColor(0, 0, 0)` | 正文 |\n| 蓝色 | (0, 0, 255) | `RGBColor(0, 0, 255)` | 引用编号 |\n| 红色 | (255, 0, 0) | `RGBColor(255, 0, 0)` | 强调 |\n| 灰色 | (128, 128, 128) | `RGBColor(128, 128, 128)` | 注释 |\n\n## 代码示例\n\n### 应用公文格式\n\n```python\nfrom docx import Document\nfrom docx.shared import Pt\nfrom docx.oxml.ns import qn\nfrom docx.enum.text import WD_ALIGN_PARAGRAPH\n\ndoc = Document('input.docx')\n\nfor para in doc.paragraphs:\n if len(para.text.strip()) > 30: # 正文\n para.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY\n para.paragraph_format.first_line_indent = Pt(32)\n para.paragraph_format.line_spacing = Pt(28) # 固定28磅\n for run in para.runs:\n run.font.name = 'Times New Roman'\n run._element.rPr.rFonts.set(qn('w:eastAsia'), '仿宋_GB2312')\n run.font.size = Pt(16)\n\ndoc.save('output.docx')\n```\n\n### 应用学术论文格式\n\n```python\nfrom docx import Document\nfrom docx.shared import Pt\nfrom docx.oxml.ns import qn\nfrom docx.enum.text import WD_ALIGN_PARAGRAPH\n\ndoc = Document('input.docx')\n\nfor para in doc.paragraphs:\n if len(para.text.strip()) > 30: # 正文\n para.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY\n para.paragraph_format.first_line_indent = Pt(24)\n para.paragraph_format.line_spacing = 1.5\n for run in para.runs:\n run.font.name = 'Times New Roman'\n run._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')\n run.font.size = Pt(12)\n\ndoc.save('output.docx')\n```\n\n## 单位转换\n\n### EMU 转 pt\n\n```python\ndef emu_to_pt(emu):\n \"\"\"EMU 转 pt\"\"\"\n return round(emu / 914400 * 72, 1) if emu else None\n\n# 使用示例\nsize_in_emu = run.font.size # 返回 EMU 单位\nsize_in_pt = emu_to_pt(size_in_emu) # 转换为 pt\n```\n\n### pt 转字符数(首行缩进)\n\n```python\ndef pt_to_chars(pt, font_size_pt):\n \"\"\"pt 转字符数\"\"\"\n return round(pt / font_size_pt, 1)\n\n# 示例:21pt 缩进在五号字(10.5pt)下是多少字符?\nchars = pt_to_chars(21, 10.5) # 结果:2.0字符\n```\n\n## 常见字体\n\n### 中文字体\n\n| 字体名称 | 用途 | 备注 |\n|---------|------|------|\n| 仿宋_GB2312 | 公文正文 | 必须使用此字体 |\n| 宋体 | 学术论文正文 | 最常用 |\n| 黑体 | 标题 | 加粗效果 |\n| 楷体_GB2312 | 引用、注释 | 公文二级标题 |\n| 方正小标宋简体 | 公文标题 | 特殊字体 |\n\n### 英文字体\n\n| 字体名称 | 用途 | 备注 |\n|---------|------|------|\n| Times New Roman | 正文 | 最常用 |\n| Arial | 标题 | 无衬线字体 |\n| Arial Black | 文档标题 | 加粗效果 |\n| Calibri | 现代文档 | Office 默认 |\n\n## 页面设置\n\n### A4 纸张标准\n\n```python\nfrom docx.shared import Pt\n\nsection = doc.sections[0]\nsection.page_height = Pt(845) # 29.7cm\nsection.page_width = Pt(598) # 21cm\nsection.top_margin = Pt(72) # 2.54cm (1英寸)\nsection.bottom_margin = Pt(72)\nsection.left_margin = Pt(90) # 3.17cm\nsection.right_margin = Pt(90)\n```\n\n### 公文页面设置\n\n```python\nsection.top_margin = Pt(106) # 3.7cm\nsection.bottom_margin = Pt(85) # 3.0cm\nsection.left_margin = Pt(99) # 3.5cm\nsection.right_margin = Pt(85) # 3.0cm\n```\n\n## 参考资料\n\n- GB/T 9704-2012《党政机关公文格式》\n- 学位论文格式规范(各高校标准)\n- python-docx 官方文档:https://python-docx.readthedocs.io/\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":8042,"content_sha256":"17da2188b4a0f9b17ca336ca2dff27e1d39f47e213cc5f194d8aba6934fe26f0"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"Word 文档格式处理","type":"text"}]},{"type":"paragraph","content":[{"text":"使用 python-docx 库精确操作 Word 文档格式,适用于格式分析、格式规范化、批量修改。","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"核心规则","type":"text"}]},{"type":"paragraph","content":[{"text":"被调用时立即执行","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"确认文件路径","type":"text","marks":[{"type":"strong"}]},{"text":":询问用户 Word 文档的完整路径","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"明确需求","type":"text","marks":[{"type":"strong"}]},{"text":":确认是分析格式还是修改格式,目标规范是什么","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"选择模板","type":"text","marks":[{"type":"strong"}]},{"text":":根据需求选择合适的代码模板或脚本","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"生成脚本","type":"text","marks":[{"type":"strong"}]},{"text":":创建独立的 Python 脚本文件","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"执行验证","type":"text","marks":[{"type":"strong"}]},{"text":":使用 ","type":"text"},{"text":"uv run","type":"text","marks":[{"type":"code_inline"}]},{"text":" 执行并检查结果","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"强制性约束","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"✓ ","type":"text"},{"text":"必须使用","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"uv run --with python-docx python3 script.py","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"✓ ","type":"text"},{"text":"必须处理","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"doc.paragraphs","type":"text","marks":[{"type":"code_inline"}]},{"text":" 和 ","type":"text"},{"text":"doc.tables","type":"text","marks":[{"type":"code_inline"}]},{"text":"(文档正文常在表格内)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"✓ ","type":"text"},{"text":"必须分设","type":"text","marks":[{"type":"strong"}]},{"text":" 中英文字体(使用 ","type":"text"},{"text":"qn('w:eastAsia')","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"✓ ","type":"text"},{"text":"必须询问","type":"text","marks":[{"type":"strong"}]},{"text":" 用户文件路径和输出路径","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"✗ ","type":"text"},{"text":"禁止使用","type":"text","marks":[{"type":"strong"}]},{"text":" 直接 ","type":"text"},{"text":"python","type":"text","marks":[{"type":"code_inline"}]},{"text":" 命令(缺少依赖)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"✗ ","type":"text"},{"text":"禁止遗漏","type":"text","marks":[{"type":"strong"}]},{"text":" 表格内容处理(常见错误)","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"何时使用","type":"text"}]},{"type":"paragraph","content":[{"text":"触发场景","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"分析 Word 文档格式(字体/字号/缩进/行距)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"批量修改文档格式","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"统一排版规范(学术论文、报告等)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"处理中英文混排字体","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"修改交叉引用/参考文献样式","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"触发关键词","type":"text","marks":[{"type":"strong"}]},{"text":":修改 Word 格式、统一字体、调整缩进、分析文档格式、参考文献格式","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"决策树","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"用户需求是什么?\n├─ 不清楚当前格式 → 使用 scripts/analyze.py\n├─ 应用公文标准 → 使用 scripts/format_official.py\n├─ 应用学术标准 → 使用 scripts/format_academic.py\n├─ 统一正文格式 → 使用【快速模板:批量格式化】\n├─ 修改参考文献 → 使用【快速模板:参考文献处理】\n└─ 自定义需求 → 基于【基础模板】组合","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"快速开始","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"基础模板","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"python"},"content":[{"text":"from docx import Document\nfrom docx.shared import Pt\nfrom docx.oxml.ns import qn\n\ndoc = Document('input.docx')\n\ndef set_font(run, cn='宋体', en='Times New Roman', size=10.5):\n \"\"\"设置中英文字体\"\"\"\n run.font.name = en\n run._element.rPr.rFonts.set(qn('w:eastAsia'), cn)\n run.font.size = Pt(size)\n\ndef process_all_paragraphs(doc, process_func):\n \"\"\"遍历所有段落(包括表格内)\"\"\"\n for para in doc.paragraphs:\n process_func(para)\n\n for table in doc.tables:\n for row in table.rows:\n for cell in row.cells:\n for para in cell.paragraphs:\n process_func(para)\n\n# 使用示例\ndef format_para(para):\n para.paragraph_format.first_line_indent = Pt(21)\n for run in para.runs:\n set_font(run, cn='宋体', en='Times New Roman', size=10.5)\n\nprocess_all_paragraphs(doc, format_para)\ndoc.save('output.docx')","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"快速模板:批量格式化","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"python"},"content":[{"text":"from docx import Document\nfrom docx.shared import Pt\nfrom docx.oxml.ns import qn\n\ndoc = Document('input.docx')\n\nfor para in doc.paragraphs:\n if len(para.text.strip()) > 30:\n para.paragraph_format.first_line_indent = Pt(21)\n para.paragraph_format.line_spacing = 1.5\n for run in para.runs:\n run.font.name = 'Times New Roman'\n run._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')\n run.font.size = Pt(10.5)\n\nfor table in doc.tables:\n for row in table.rows:\n for cell in row.cells:\n for para in cell.paragraphs:\n if len(para.text.strip()) > 30:\n para.paragraph_format.first_line_indent = Pt(21)\n for run in para.runs:\n run.font.name = 'Times New Roman'\n run._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')\n run.font.size = Pt(10.5)\n\ndoc.save('output.docx')","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"快速模板:参考文献处理","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"python"},"content":[{"text":"from docx import Document\nfrom docx.shared import Pt, RGBColor\nimport re\n\ndoc = Document('input.docx')\nref_pattern = re.compile(r'\\[\\d+\\]')\n\nfor para in doc.paragraphs:\n if para.text.strip().startswith('[') and ']' in para.text[:5]:\n para.paragraph_format.first_line_indent = Pt(-21)\n para.paragraph_format.left_indent = Pt(21)\n\n for run in para.runs:\n if ref_pattern.search(run.text):\n run.font.color.rgb = RGBColor(0, 0, 255)\n\ndoc.save('output.docx')","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"执行检查清单","type":"text"}]},{"type":"paragraph","content":[{"text":"生成脚本前","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"checkbox_list","attrs":{"id":null},"content":[{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"已确认用户提供的文件路径","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"已明确目标格式规范","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"已选择合适的模板或脚本","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"脚本中必须包含","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"checkbox_list","attrs":{"id":null},"content":[{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"同时处理 ","type":"text"},{"text":"doc.paragraphs","type":"text","marks":[{"type":"code_inline"}]},{"text":" 和 ","type":"text"},{"text":"doc.tables","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"使用 ","type":"text"},{"text":"qn('w:eastAsia')","type":"text","marks":[{"type":"code_inline"}]},{"text":" 设置中文字体","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"正确的输入/输出文件路径","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"执行前提醒用户","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"checkbox_list","attrs":{"id":null},"content":[{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"备份原文件或使用不同的输出文件名","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"确认文件未被其他程序打开","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"执行命令","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"uv run --with python-docx python3 script.py","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"常见错误","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"错误","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"原因","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"解决方案","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"修改未生效","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"遗漏表格内容","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"检查是否处理了 ","type":"text"},{"text":"doc.tables","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"中文字体不对","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"未用 ","type":"text"},{"text":"qn('w:eastAsia')","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"必须单独设置中文字体","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"文件打开失败","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"路径错误或文件被占用","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"检查路径,关闭 Word","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"依赖缺失","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"未用 ","type":"text"},{"text":"uv run","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"使用完整命令","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"相关文档","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"STANDARDS.md","type":"text","marks":[{"type":"strong"}]},{"text":" - 默认格式标准(公文/学术论文)和参数速查表","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"EXAMPLES.md","type":"text","marks":[{"type":"strong"}]},{"text":" - 详细示例代码(多级标题、表格、图片、页眉页脚等)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"scripts/","type":"text","marks":[{"type":"strong"}]},{"text":" - 预置工具脚本(分析、公文格式化、学术格式化)","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Markdown 转 DOCX","type":"text"}]},{"type":"paragraph","content":[{"text":"直接读取 Markdown 文档并按格式要求写入 DOCX,无需 pandoc。","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"基础模板","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"python"},"content":[{"text":"from docx import Document\nfrom docx.shared import Pt\nfrom docx.oxml.ns import qn\nfrom docx.enum.text import WD_ALIGN_PARAGRAPH\nimport re\n\ndoc = Document()\n\ndef add_heading(doc, text, level):\n \"\"\"添加标题\"\"\"\n para = doc.add_paragraph(text)\n if level == 1:\n para.alignment = WD_ALIGN_PARAGRAPH.CENTER\n for run in para.runs:\n run.font.name = 'Arial'\n run._element.rPr.rFonts.set(qn('w:eastAsia'), '黑体')\n run.font.size = Pt(15)\n run.font.bold = True\n elif level == 2:\n para.alignment = WD_ALIGN_PARAGRAPH.LEFT\n for run in para.runs:\n run.font.name = 'Arial'\n run._element.rPr.rFonts.set(qn('w:eastAsia'), '黑体')\n run.font.size = Pt(14)\n run.font.bold = True\n elif level == 3:\n para.alignment = WD_ALIGN_PARAGRAPH.LEFT\n for run in para.runs:\n run.font.name = 'Arial'\n run._element.rPr.rFonts.set(qn('w:eastAsia'), '黑体')\n run.font.size = Pt(12)\n run.font.bold = True\n\ndef add_paragraph(doc, text):\n \"\"\"添加正文段落\"\"\"\n para = doc.add_paragraph(text)\n para.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY\n para.paragraph_format.first_line_indent = Pt(24)\n para.paragraph_format.line_spacing = 1.5\n for run in para.runs:\n run.font.name = 'Times New Roman'\n run._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')\n run.font.size = Pt(12)\n\n# 读取 Markdown\nwith open('input.md', 'r', encoding='utf-8') as f:\n for line in f:\n line = line.rstrip()\n if not line:\n continue\n\n # 标题\n if line.startswith('# '):\n add_heading(doc, line[2:], 1)\n elif line.startswith('## '):\n add_heading(doc, line[3:], 2)\n elif line.startswith('### '):\n add_heading(doc, line[4:], 3)\n # 正文\n else:\n add_paragraph(doc, line)\n\ndoc.save('output.docx')","type":"text"}]},{"type":"paragraph","content":[{"text":"使用预置脚本","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"uv run --with python-docx python3 .claude/skills/docx-format/scripts/md_to_docx.py input.md output.docx","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"注意事项","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"只支持 .docx","type":"text","marks":[{"type":"strong"}]},{"text":":不支持旧版 .doc","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"表格内容","type":"text","marks":[{"type":"strong"}]},{"text":":学术论文、报告等正文常在表格内,必须处理","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"单位转换","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"},{"text":"font.size","type":"text","marks":[{"type":"code_inline"}]},{"text":" 返回 EMU,需转换(÷ 914400 × 72)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"备份原文件","type":"text","marks":[{"type":"strong"}]},{"text":":修改前建议备份","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Markdown 转换","type":"text","marks":[{"type":"strong"}]},{"text":":使用 pandoc 转换后再格式化","type":"text"}]}]}]},{"type":"hr","attrs":{"markup":"---"}}]},"metadata":{"date":"2026-06-05","name":"docx-format","author":"@skillopedia","source":{"stars":44,"repo_name":"docx-format-skill","origin_url":"https://github.com/ninestep/docx-format-skill/blob/HEAD/SKILL.md","repo_owner":"ninestep","body_sha256":"7b78f6e889348934918f04dd94f63b2ebdd38101e70b31ddec1983ee4a2f751f","cluster_key":"76bcfcd63108f4027f77a58597a61325468695fa40267764650de4f1c6f70b7b","clean_bundle":{"format":"clean-skill-bundle-v1","source":"ninestep/docx-format-skill/SKILL.md","attachments":[{"id":"d5491965-f3e6-5ce6-b5f3-f80fd4eb7988","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/d5491965-f3e6-5ce6-b5f3-f80fd4eb7988/attachment","path":".gitignore","size":194,"sha256":"e0206f4ecf2f52be102d52bb7bda19cadad6bc9fb3e8430a7aa036c5a3d8d18c","contentType":"text/plain; charset=utf-8"},{"id":"f63e4ceb-6fad-52bb-b081-3ac0150054f2","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/f63e4ceb-6fad-52bb-b081-3ac0150054f2/attachment.md","path":"EXAMPLES.md","size":19939,"sha256":"915b8b02ae1b125aff9f0c6817d430fc28c17d22f9a07ab7a8a4c0fab3e161b1","contentType":"text/markdown; charset=utf-8"},{"id":"3add749f-5793-5c59-bb4e-911166ebd7c7","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/3add749f-5793-5c59-bb4e-911166ebd7c7/attachment.md","path":"README.md","size":3628,"sha256":"4cedbdbbcdd3d17e580b855baa02153eaa7e0104593fb9fd3e71e4d2ec3a9e93","contentType":"text/markdown; charset=utf-8"},{"id":"c5f48182-cde6-5cc6-9afe-fae00de95270","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c5f48182-cde6-5cc6-9afe-fae00de95270/attachment.md","path":"STANDARDS.md","size":8042,"sha256":"17da2188b4a0f9b17ca336ca2dff27e1d39f47e213cc5f194d8aba6934fe26f0","contentType":"text/markdown; charset=utf-8"},{"id":"d92c74c4-3c2f-51a4-85dc-b7d7d3dbed83","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/d92c74c4-3c2f-51a4-85dc-b7d7d3dbed83/attachment.py","path":"scripts/analyze.py","size":2654,"sha256":"db255cb36224518f90f7b22b55a2dbbba7ad99b5a2baa9029e648b949dfa5e31","contentType":"text/x-python; charset=utf-8"},{"id":"a99a3666-4861-5f3d-a626-e9a4e7847654","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/a99a3666-4861-5f3d-a626-e9a4e7847654/attachment.py","path":"scripts/format_academic.py","size":6976,"sha256":"83d253d688a0dcf945ec5add4b48436591ce4aa45b77de47342432cdae8ed30d","contentType":"text/x-python; charset=utf-8"},{"id":"f0ba9b51-7178-5536-8a34-245e80568e60","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/f0ba9b51-7178-5536-8a34-245e80568e60/attachment.py","path":"scripts/format_official.py","size":7201,"sha256":"fafb74474b2cca061a9d40c26d6508f7094fb766d824567876900e6e5c9f6f2f","contentType":"text/x-python; charset=utf-8"},{"id":"97945c84-238a-5224-a876-69b600923e19","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/97945c84-238a-5224-a876-69b600923e19/attachment.py","path":"scripts/md_to_docx.py","size":8736,"sha256":"1e2b484b14a681f5987f8b20c522bbdaf62ec9bc8a39a385ea7c2d26d3d36e78","contentType":"text/x-python; charset=utf-8"}],"bundle_sha256":"b213b0087ddab2f933d8129c8dd86489740622682641e3674660bf1572b5ed38","attachment_count":8,"text_attachments":7,"attachment_storage":"skillopedia-attachments-v1","binary_attachments":1,"excluded_attachments":[]},"cluster_size":1,"skill_md_path":"SKILL.md","import_metadata":{"date":"2026-06-05","author":"@skillopedia","version":"v1","category":"documents-office","category_label":"Documents"},"exact_dupes_collapsed_into_this":0},"version":"v1","category":"documents-office","import_tag":"clean-skills-v1","description":"使用 python-docx 精确读取、分析、修改 Word 文档(.docx)格式。当用户需要分析文档格式、批量修改格式、统一排版规范、处理中英文混排字体、修改交叉引用样式时使用此 skill。"}},"renderedAt":1782979687419}

Word 文档格式处理 使用 python-docx 库精确操作 Word 文档格式,适用于格式分析、格式规范化、批量修改。 核心规则 被调用时立即执行 : 1. 确认文件路径 :询问用户 Word 文档的完整路径 2. 明确需求 :确认是分析格式还是修改格式,目标规范是什么 3. 选择模板 :根据需求选择合适的代码模板或脚本 4. 生成脚本 :创建独立的 Python 脚本文件 5. 执行验证 :使用 执行并检查结果 强制性约束 : - ✓ 必须使用 - ✓ 必须处理 和 (文档正文常在表格内) - ✓ 必须分设 中英文字体(使用 ) - ✓ 必须询问 用户文件路径和输出路径 - ✗ 禁止使用 直接 命令(缺少依赖) - ✗ 禁止遗漏 表格内容处理(常见错误) 何时使用 触发场景 : - 分析 Word 文档格式(字体/字号/缩进/行距) - 批量修改文档格式 - 统一排版规范(学术论文、报告等) - 处理中英文混排字体 - 修改交叉引用/参考文献样式 触发关键词 :修改 Word 格式、统一字体、调整缩进、分析文档格式、参考文献格式 决策树 快速开始 基础模板 快速模板:批量格式化 快速模板:参考文献处理 执行检查清单 生成脚本前 : - [ ] 已确认用户提供的文件路径 - [ ] 已明确目标格式规范 - [ ] 已选择合适的模板或脚本 脚本中必须包含 : - [ ] 同时…