用自然语言操作 Word 文档 - 分析、编辑、转换 DOCX 文档
Project description
name: vibe-docx description: | 用自然语言操作 Word 文档 - 分析、编辑、转换 DOCX 文档。
触发场景:
- 用户提到 Word 文档、DOCX 文件操作
- 需要修复格式、整理样式、调整页面设置
- 需要合并/拆分文档、操作章节
- 需要处理表格、文本框、图片
- 需要转换文档风格(商务报告、学术论文等)
- 需要在文档中插入 Markdown 内容
vibe-docx - Word 文档处理
用自然语言操作 Word 文档,支持分析、编辑、格式转换、批量处理。
快速开始
import vibe_docx
# 1. 分析文档(只读)
result = vibe_docx.analyze("document.docx")
print(result["document_info"])
# 2. 开始编辑会话
session = vibe_docx.begin_session("document.docx", backup=True)
session_id = session["session_id"]
# 3. 执行修改
vibe_docx.fix_formatting(session_id, options={"default_font": "宋体"})
# 4. 提交或回滚
vibe_docx.commit(session_id) # 或 vibe_docx.rollback(session_id)
核心工作流
1. 格式修复 (format-fix)
修复标题样式、段落格式、空段落、行距等问题。
触发:格式乱、修复格式、整理格式、标题样式
session = vibe_docx.begin_session("report.docx", backup=True)
result = vibe_docx.fix_formatting(session["session_id"], options={
"default_font": "宋体", # 正文字体
"title_font": "黑体", # 标题字体
"remove_empty_paragraphs": True, # 移除空段落
"convert_markdown": True, # 转换 Markdown 语法
"line_spacing": 1.5, # 统一行距
"first_line_indent": 2, # 首行缩进(字符数)
})
print(f"修改统计: {result['changes']}")
vibe_docx.commit(session["session_id"])
2. 文档分析 (analyze)
全面分析文档问题,检测格式、结构、内容问题。
触发:分析文档、检测问题、文档诊断
result = vibe_docx.analyze("report.docx")
# 检测结果
print(result["document_info"]) # 段落数、表格数、图片数、文本框数
print(result["issues"]) # 发现的问题列表
# 检测能力:
# - 标题级别跳跃 (headings)
# - 表格边框缺失 (tables)
# - 空段落过多 (empty_paragraphs)
# - Markdown 未转换 (markdown)
# - 文本框检测 (textboxes)
# - 字体不一致 (fonts)
# - 页边距异常 (margins)
3. 风格转换 (style-convert)
将文档转换为专业风格:商务报告、简洁风格、学术论文。
触发:变成风格、专业报告、风格转换、应用模板
session = vibe_docx.begin_session("report.docx", backup=True)
# 方式一:应用预置模板(推荐)
result = vibe_docx.apply_style_template(
session["session_id"],
template_name="business_report" # 或 academic_paper, internal_simple
)
print(f"应用模板: {result['template']}")
print(f"修改内容: {result['changes']}")
# 方式二:手动设置
vibe_docx.fix_page_setup(session["session_id"], margins={
"top": "2.54cm", "bottom": "2.54cm",
"left": "3.17cm", "right": "3.17cm"
})
vibe_docx.fix_formatting(session["session_id"], options={
"default_font": "宋体",
"title_font": "黑体",
"line_spacing": 1.5
})
# 方式三:模板 + 自定义覆盖
vibe_docx.apply_style_template(
session["session_id"],
template_name="academic_paper",
custom_options={"default_font": "楷体", "line_spacing": 2.0}
)
vibe_docx.commit(session["session_id"])
4. 表格整理 (table-organize)
统一表格样式,添加边框。
触发:表格样式、表格整理、表格边框、添加边框
session = vibe_docx.begin_session("report.docx", backup=True)
vibe_docx.fix_table_borders(session["session_id"], border_style="single")
vibe_docx.commit(session["session_id"])
5. 章节操作 (section-operate)
提取、删除、移动章节。
触发:章节大纲、拆分章节、提取章节、删除章节
session = vibe_docx.begin_session("report.docx", backup=True)
vibe_docx.remove_section(session["session_id"], "附录")
vibe_docx.add_section(session["session_id"], "新章节", "章节内容")
vibe_docx.commit(session["session_id"])
6. 文档合并 (document-merge)
合并多个文档。
触发:合并文档、批量合并、多个文档合并
vibe_docx.merge_documents(
["part1.docx", "part2.docx", "part3.docx"],
"merged.docx",
options={"add_page_break": True}
)
7. 文本框处理 (textbox-extract)
检测、提取、转换文本框内容。
触发:文本框、提取文本框、简历分析
# 检测文本框
textboxes = vibe_docx.detect_textboxes("resume.docx")
print(f"发现 {textboxes['stats']['total_count']} 个文本框")
# 提取内容
session = vibe_docx.begin_session("resume.docx", backup=True)
vibe_docx.extract_textbox_content(session["session_id"])
vibe_docx.commit(session["session_id"])
工具分类
只读工具(无需会话)
| 工具 | 说明 |
|---|---|
analyze(file_path) |
全面分析文档,检测格式/结构/内容问题 |
detect_textboxes(file_path) |
检测文本框 |
get_section_outline(file_path) |
获取章节大纲 |
get_document_structure(file_path) |
获取文档结构 |
validate_xml(doc_path) |
XML 底层验证 |
修改工具(需要会话)
| 工具 | 说明 |
|---|---|
begin_session(file_path, backup=True) |
开始会话,返回 session_id |
commit(session_id) |
提交修改,清理备份 |
rollback(session_id) |
回滚修改,恢复原文档 |
fix_formatting(session_id, options) |
修复格式(字体、行距、空段落等) |
fix_page_setup(session_id, margins, orientation) |
页面设置 |
fix_table_borders(session_id, table_indices, style) |
表格边框 |
fix_list_formatting(session_id, options) |
列表格式修复 |
apply_style_template(session_id, template_name, custom_options) |
应用预置样式模板 |
add_section(session_id, title, content) |
添加章节 |
remove_section(session_id, section_title) |
删除章节 |
extract_textbox_content(session_id) |
提取文本框 |
image_list(session_id) / image_insert(session_id, path) |
图片操作 |
table_list(session_id) / table_update(session_id, ...) |
表格操作 |
批量工具(无需会话)
| 工具 | 说明 |
|---|---|
merge_documents(file_paths, output_path) |
合并文档 |
split_document(file_path, split_points, output_dir) |
拆分文档 |
会话管理
会话 ID 格式:ses_{uuid_hex}(如 ses_ff6df5a2b3c4)
会话特性:
- 自动备份(存放在
.vibe-backups/目录) - 文件锁(防止同一文件被多个会话修改)
- 自动过期(1 小时无活动自动清理)
# 完整会话流程
session = vibe_docx.begin_session("document.docx", backup=True)
try:
vibe_docx.fix_formatting(session["session_id"])
vibe_docx.fix_table_borders(session["session_id"])
vibe_docx.commit(session["session_id"])
except Exception as e:
vibe_docx.rollback(session["session_id"])
print(f"操作失败,已回滚: {e}")
错误码
| 错误码 | 说明 | 恢复建议 |
|---|---|---|
| DOC001 | 文档不存在 | 请提供有效的文档路径 |
| DOC002 | 不支持的文档格式 | 仅支持 .docx 格式 |
| DOC003 | 文档已损坏 | 尝试修复或使用备份 |
| DOC004 | 文档被锁定 | 请关闭其他程序后重试 |
| SES001 | 会话无效 | 请创建新会话 |
| SES002 | 会话已过期 | 会话超过 1 小时未活动 |
| SES003 | 会话冲突 | 文档正被其他会话使用 |
| SES004 | 备份失败 | 检查磁盘空间和权限 |
| VAL001 | 分析失败 | 检查文件是否损坏 |
| BLD001 | 执行失败 | 检查操作参数 |
响应格式
所有工具返回统一格式:
# 成功
{"success": True, "data": {...}, "changes": {...}}
# 失败
{
"success": False,
"error": {
"code": "DOC001",
"message": "文档不存在",
"detail": "/path/to/file.docx",
"recovery": "请提供有效的文档路径",
"can_retry": True
}
}
预置模板
| 模板 | 适用场景 |
|---|---|
business_report |
商务报告 - 黑体标题 + 宋体正文 + 1.5倍行距 |
internal_simple |
简洁风格 - 适合内部通知 |
academic_paper |
学术论文 - 首行缩进 + 1.5倍行距 |
模板配置详情
# business_report - 商务报告
{
"margins": {"top": "2.54cm", "bottom": "2.54cm", "left": "3.17cm", "right": "3.17cm"},
"default_font": "宋体",
"title_font": "黑体",
"line_spacing": 1.5,
"first_line_indent": 0
}
# academic_paper - 学术论文
{
"margins": {"top": "2.54cm", "bottom": "2.54cm", "left": "3cm", "right": "3cm"},
"default_font": "宋体",
"title_font": "黑体",
"line_spacing": 1.5,
"first_line_indent": 2 # 首行缩进 2 字符
}
# internal_simple - 内部简报
{
"margins": {"top": "2cm", "bottom": "2cm", "left": "2.5cm", "right": "2.5cm"},
"default_font": "宋体",
"title_font": "黑体",
"line_spacing": 1.15,
"first_line_indent": 0
}
LLM 使用流程
1. 理解用户需求
用户用自然语言描述需求,如"这个文档格式很乱"、"帮我转换成专业报告风格"。
2. 匹配意图
根据用户输入匹配对应的工作流或工具。参考 references/intent-mapping.csv。
3. 执行操作
- 只读操作:直接调用 validator 工具
- 修改操作:开始会话 → 执行修改 → 提交/回滚
4. 返回结果
返回统一格式的响应,包含成功状态和详细信息。
详细参考
- references/api.md - 完整 API 参考和参数说明
- references/tech-spec-v1.2.md - V1.2 新增接口技术规格
- references/workflows.md - 工作流详细定义和执行流程
- references/templates.md - 模板配置和自定义指南
- references/intent-mapping.csv - 意图映射表
依赖
- Python >= 3.10
- python-docx >= 1.1.0
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file vibe_docx-1.0.0.tar.gz.
File metadata
- Download URL: vibe_docx-1.0.0.tar.gz
- Upload date:
- Size: 39.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a2affb3ab3abbbd970f7e05d5c403420d353d97af2b16b23689d5a5526f79e0b
|
|
| MD5 |
e804db74ee430f5fc6e34d548ad90cca
|
|
| BLAKE2b-256 |
9c4bbe4c3d67c5e3e9d74413125091e451bb98520d03c114acd09f0159bcb89a
|
File details
Details for the file vibe_docx-1.0.0-py3-none-any.whl.
File metadata
- Download URL: vibe_docx-1.0.0-py3-none-any.whl
- Upload date:
- Size: 34.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
500f27c2f5974ed445f60b4c227cda3664b1c028a69e329947815df944301e37
|
|
| MD5 |
264092aa0e20c654277bdcde0db0dd28
|
|
| BLAKE2b-256 |
8c3e505dccca5e8f2e2076b6f3f9e8d586ea39e801d39f14ec196faf55e56d77
|