Appearance
Claude Cowork 办公 skills 完全解析:docx/xlsx/pptx 三个 skill 的技术内幕。
核心原理
这些 skills 的本质是弥补 AI 无法原生处理二进制/ZIP 格式文件的缺陷,通过三个层面帮助 AI 操作 Office 文档:
| 层面 | 操作 | 工具 |
|---|---|---|
| 读取 | 二进制 → AI 可理解的文本 | unpack.py、pandoc |
| 创建 | AI 生成 → 二进制文件 | docx-js、openpyxl |
| 编辑 | 解包 → 编辑 XML → 打包 | 三步流 |
Word Skills(docx)
目录结构
docx/
├── SKILL.md # 核心:skill 定义文件
├── LICENSE.txt
└── scripts/
├── __init__.py
├── comment.py # 添加批注/回复
├── accept_changes.py # 接受所有修订
├── templates/ # 批注 XML 模板
│ ├── comments.xml
│ ├── commentsExtended.xml
│ └── people.xml
└── office/ # 通用 Office 工具集
├── unpack.py # 解包 .docx → XML
├── pack.py # 打包 XML → .docx
├── validate.py # XSD schema 校验
├── soffice.py # LibreOffice 命令封装
└── helpers/ # 辅助工具工作流程
┌─────────────────────────────────────────────────────────┐
│ Word 文档处理流程 │
├─────────────────────────────────────────────────────────┤
│ │
│ 读取文档 │
│ .docx(ZIP) ──→ unpack.py ──→ XML 目录 ──→ AI 理解 │
│ │
│ 创建文档 │
│ AI 生成 ──→ docx-js (JS) ──→ .docx 文件 │
│ │
│ 编辑文档 │
│ .docx ──→ unpack.py ──→ Edit XML ──→ pack.py ──→ .docx│
│ │
└─────────────────────────────────────────────────────────┘关键 API(docx-js)
javascript
// 页面设置
doc.creator('Document Creator')
doc.title('Document Title')
doc.subject('Subject')
doc.pageWidth() // 页面宽度
doc.pageMargins() // 页边距
// 样式定义
doc.createStyle({
name: 'Normal',
run: { fontSize: 12 },
paragraph: { spacing: { after: 12 } }
})
// 表格(双重宽度设定)
table.width({
size: 9000, // DXA 单位(1/20 点)
type: 'dxa'
})CRITICAL 警告
| 警告 | 说明 |
|---|---|
❌ 不能用 \n | 必须用 paragraph() |
| ❌ 不能用 unicode 子弹符 | 必须用 <w:numPr> |
| ❌ 表格不能用百分比 | 必须用 DXA |
| ❌ 连续相同格式 run | 会被合并 |
Excel Skills(xlsx)
核心工具
| 工具 | 功能 |
|---|---|
openpyxl | 读写 .xlsx 文件 |
pandas | 数据分析 |
unpack.py | 解包查看 XML 结构 |
创建 Excel
python
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill
wb = Workbook()
ws = wb.active
ws.title = "Data Sheet"
# 添加数据
ws['A1'] = 'Name'
ws['B1'] = 'Value'
ws['A2'] = 'Item 1'
ws['B2'] = 100
# 设置样式
ws['A1'].font = Font(bold=True)
ws['A1'].fill = PatternFill(start_color="FFFF00", fill_type="solid")
# 保存
wb.save('output.xlsx')常用操作
| 操作 | 方法 |
|---|---|
| 写入数据 | ws['A1'] = value |
| 合并单元格 | ws.merge_cells('A1:C1') |
| 设置列宽 | ws.column_dimensions['A'].width = 20 |
| 添加公式 | ws['C1'] = '=SUM(A1:B1)' |
| 创建图表 | ws.add_chart(Chart(), 'E1') |
PPT Skills(pptx)
目录结构
pptx/
├── SKILL.md
└── scripts/
├── office/
│ ├── unpack.py
│ ├── pack.py
│ └── templates/
│ └── slide_layouts/
└── python-pptx/ # 主工具创建 PPT
python
from pptx import Presentation
from pptx.util import Inches, Pt
prs = Presentation()
prs.slide_width = Inches(10)
prs.slide_height = Inches(7.5)
# 添加幻灯片
slide_layout = prs.slide_layouts[1] # 标题+内容布局
slide = prs.slides.add_slide(slide_layout)
# 设置标题
title = slide.shapes.title
title.text = "My Presentation"
# 添加内容
content = slide.placeholders[1]
content.text = "• Point 1\n• Point 2\n• Point 3"
# 保存
prs.save('output.pptx')常用操作
| 操作 | 方法 |
|---|---|
| 添加文本框 | slide.shapes.add_textbox() |
| 添加图片 | slide.shapes.add_picture() |
| 添加表格 | slide.shapes.add_table() |
| 设置动画 | slide.shapes.animate() |
| 切换效果 | slide.slide_layout |
通用 Office 工具
unpack.py(解包)
bash
# 解包 docx
python unpack.py document.docx output_dir/
# 解包后结构
output_dir/
├── word/
│ ├── document.xml # 主文档内容
│ ├── styles.xml # 样式定义
│ └── comments.xml # 批注
├── [Content_Types].xml
└── _rels/pack.py(打包)
bash
# 打包 docx
python pack.py output_dir/ new_document.docx
# 打包时自动
- XSD schema 校验
- 自动修复常见错误
- 压缩为 ZIPvalidate.py(校验)
bash
# 校验 docx
python validate.py document.docx
# 检查项
- XML 结构完整性
- Schema 合规性
- 文件格式正确性三步编辑流详解
┌─────────────────────────────────────────────────────────┐
│ 三步编辑流 │
├─────────────────────────────────────────────────────────┤
│ │
│ Step 1: 解包 │
│ document.docx ──→ unzip ──→ XML 文件们 │
│ │
│ Step 2: 编辑 XML │
│ <w:p> 元素内容改一改 │
│ 样式调一调 │
│ │
│ Step 3: 打包 │
│ XML 文件们 ──→ zip ──→ document.docx │
│ │
└─────────────────────────────────────────────────────────┘示例:修改段落文本
bash
# 1. 解包
python unpack.py input.docx temp_dir/
# 2. 编辑 XML(document.xml)
# 找到 <w:t>你的文本</w:t>
# 改为 <w:t>新文本</w:t>
# 3. 打包
python pack.py temp_dir/ output.docx一句话总结
Claude Cowork Office Skills = AI 操作 Office 文档的桥梁。
核心流程:unpack → Edit XML → Pack。
支持:Word(docx-js)、Excel(openpyxl)、PPT(python-pptx)。
