
Docx Perfect
- 104 installs
- 82 repo stars
- Updated August 2, 2026
- aaaaqwq/claude-code-skills
Create and refine polished Word documents with correct styles, tables, headings, and formatting for reports, memos, proposals, and client deliverables.
About
Claude Code skill for producing publication-quality Word documents—applying consistent styles, tables, headings, and layout fixes for reports, memos, proposals, and other business content deliverables.
- Professional Word formatting
- Style and heading consistency
- Table and layout refinement
- Report and memo generation
- Client-ready document polish
Docx Perfect by the numbers
- 104 all-time installs (skills.sh)
- Ranked #324 of 687 Office & Documents skills by installs in the Skillselion catalog
- Data as of Aug 3, 2026 (Skillselion catalog sync)
npx skills add https://github.com/aaaaqwq/claude-code-skills --skill docx-perfectAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 104 |
|---|---|
| repo stars | ★ 82 |
| Last updated | August 2, 2026 |
| Repository | aaaaqwq/claude-code-skills ↗ |
What it does
Create and refine polished Word documents with correct styles, tables, headings, and formatting for reports, memos, proposals, and client deliverables.
Files
DOCX文档美化专家
将Word文档中的内容转换为专业表格格式,支持版本化迭代优化。
快速开始
文档美化采用递增式版本管理(v0.1, v0.2, ..., v1.0),每次优化一个章节后生成新版本。
工作流程
1. 分析源文档
python -c "import sys; sys.stdout.reconfigure(encoding='utf-8'); from docx import Document; doc = Document('source.docx'); [print(p.text.strip()) for p in doc.paragraphs if p.text.strip()]"2. 确定本次优化的章节
识别需要美化的章节标题,如:
3.1 实体识别→ 创建实体属性表格3.2 实体间联系→ 创建联系关系表格5.2 索引优化设计→ 创建索引汇总表格
3. 创建表格
使用 scripts/create_table.py 创建表格,参考下方脚本模板。
4. 应用样式
使用统一样式:
- 表头: 深蓝色背景 (#4472C4) + 白色粗体文字
- 数据行: 白色/浅灰色隔行变色
- 边框: 黑色单线边框
5. 版本号管理
自动递增版本号,保存为新文件:文档名-v0.X.docx
脚本模板
详见 scripts/README.md
常见表格模式
实体属性表格
| 属性名 | 类型/约束 | 说明 |
|--------|-----------|------|
| field1 | INT, PK | 主键 |联系关系表格
| 联系 | 实体A | 实体B | 说明 |
|------|-------|-------|------|索引汇总表格
| 表名 | 索引名 | 字段 | 类型 | 说明 |样式规范
- 表头背景:
#4472C4(深蓝) - 表头文字: 白色、粗体、11号
- 奇数行: 白色
#FFFFFF - 偶数行: 浅灰
#E7E6E6 - 数据行文字: 宋体、10号
- 边框: 黑色单线,4磅
常见表格模式参考
1. 实体属性表格
用于展示数据库实体、类的属性定义。
表头: 属性名 | 类型/约束 | 说明
数据: field1 | INT, PK | 主键示例:
| 属性名 | 类型/约束 | 说明 |
|---|---|---|
| uid | BIGINT, PK | 用户唯一标识 |
| username | VARCHAR(50) | 用户姓名 |
| VARCHAR(100), UNIQUE | 邮箱地址 |
2. 联系关系表格
用于展示实体间的关联关系(1:1, 1:N, M:N)。
表头: 联系 | 实体A | 实体B | 说明示例:
| 联系 | 实体A | 实体B | 说明 |
|---|---|---|---|
| 用户→元数据 | user | metadata | 一对多 |
| 用户↔设备 | user | device | 多对多(通过user_dev) |
3. 技术选型对比表格
表头: 技术名称 | 技术简介 | 本项目用途 | 核心特性4. 索引汇总表格
表头: 表名 | 索引名称 | 索引字段 | 索引类型 | 说明5. 规范化检查表格
表头: 范式 | 定义 | 检查项 | 实现情况6. E-R图转换规则表格
表头: 转换规则 | 说明 | 应用示例7. 存储路径设计表格
表头: 数据类型 | 存储路径格式 | 示例递增式文档美化工作流程
完整工作流
源文档 → 读取分析 → 确定章节 → 创建表格 → 应用样式 → 版本保存
↓ ↓ ↓ ↓ ↓ ↓
.docx 提取文本 选择优化 定义数据 统一样式 v0.X步骤详解
Step 1: 读取源文档内容
python -c "
import sys; sys.stdout.reconfigure(encoding='utf-8')
from docx import Document
doc = Document('source.docx')
[p.text.strip() for p in doc.paragraphs if p.text.strip()]
"Step 2: 分析章节结构
识别需要美化的章节:
- 标题格式:
X.X 章节名称 - 内容类型:文本列表、表格、混合
Step 3: 定义表格数据
根据章节内容提取表格数据:
- 确定列名(表头)
- 确定行数据
- 注意:表头不包含在rows中
Step 4: 创建并插入表格
# 1. 创建表格
table = doc.add_table(rows=len(rows)+1, cols=len(headers))
# 2. 填充内容
for j, h in enumerate(headers):
table.rows[0].cells[j].text = h
for i, row in enumerate(rows):
for j, text in enumerate(row):
table.rows[i+1].cells[j].text = text
# 3. 应用样式
format_table(table)
# 4. 插入到文档
table._element.getparent().insert(
para._element.getparent().index(para._element) + 1,
table._element
)Step 5: 版本号管理
自动递增版本号:
v0.1→v0.2→v0.3→ ... →v0.9→v1.0
章节美化优先级
建议按以下顺序美化:
1. 第4章 逻辑结构设计(最重要)
- 4.1 E-R图转换规则表格
- 4.2 规范化检查表格
- 4.3 数据表设计表格
2. 第3章 概念结构设计
- 3.1 实体识别表格
- 3.2 实体间联系表格
3. 第2章 需求分析
- 2.2 功能需求表格
- 2.5 技术选型表格
4. 第5章 物理结构设计
- 5.2 索引优化表格
常见问题
Q: 中文乱码怎么办?
A: 使用 sys.stdout.reconfigure(encoding='utf-8') 在脚本开头。
Q: 表格插入位置不对?
A: 检查 insert 的索引,使用正确的参考段落。
Q: 样式不生效?
A: 确保 format_table 在填充内容之后调用。
DOCX美化脚本模板
1. 表格样式函数
from docx import Document
from docx.shared import Pt, RGBColor
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
def set_cell_border(cell, **kwargs):
"""设置单元格边框"""
tc = cell._tc
tcPr = tc.get_or_add_tcPr()
tcBorders = OxmlElement('w:tcBorders')
for edge in ('top', 'left', 'bottom', 'right'):
edge_data = kwargs.get(edge)
if edge_data:
border = OxmlElement(f'w:{edge}')
border.set(qn('w:val'), edge_data.get('val', 'single'))
border.set(qn('w:sz'), str(edge_data.get('sz', 4)))
border.set(qn('w:color'), edge_data.get('color', '000000'))
tcBorders.append(border)
tcPr.append(tcBorders)
def set_cell_background(cell, color="4472C4"):
"""设置单元格背景色"""
tc = cell._tc
tcPr = tc.get_or_add_tcPr()
shd = OxmlElement('w:shd')
shd.set(qn('w:fill'), color)
tcPr.append(shd)
def format_table(table):
"""美化表格:表头深蓝+斑马纹"""
border_props = {'val': 'single', 'sz': 4, 'color': '000000'}
for row in table.rows:
for cell in row.cells:
set_cell_border(cell, top=border_props, left=border_props,
bottom=border_props, right=border_props)
# 表头样式
for cell in table.rows[0].cells:
set_cell_background(cell, "4472C4") # 深蓝色
for paragraph in cell.paragraphs:
paragraph.alignment = 1 # 居中
for run in paragraph.runs:
run.font.size = Pt(11)
run.font.bold = True
run.font.color.rgb = RGBColor(255, 255, 255)
# 数据行样式(隔行变色)
for i, row in enumerate(table.rows[1:], 1):
bg_color = "E7E6E6" if i % 2 == 0 else "FFFFFF"
for cell in row.cells:
set_cell_background(cell, bg_color)
for paragraph in cell.paragraphs:
for run in paragraph.runs:
run.font.size = Pt(10)2. 创建表格模板
def create_table(doc, headers, rows):
"""创建并美化表格"""
table = doc.add_table(rows=len(rows) + 1, cols=len(headers))
# 填充表头
for j, h in enumerate(headers):
table.rows[0].cells[j].text = h
# 填充数据
for i, row_data in enumerate(rows):
for j, text in enumerate(row_data):
table.rows[i + 1].cells[j].text = text
# 应用样式
format_table(table)
return table3. 版本号管理
import glob
import re
def get_next_version(path):
"""获取下一个版本号"""
files = glob.glob(path + '/*v0.*.docx') + glob.glob(path + '/*v1.*.docx')
versions = []
for f in files:
m = re.search(r'v(\d+)\.(\d+)', f)
if m:
versions.append((int(m.group(1)), int(m.group(2))))
if not versions:
return 'v0.2'
versions.sort()
last = versions[-1]
if last[1] < 9:
return f'v{last[0]}.{last[1] + 1}'
else:
return f'v{last[0] + 1}.0'4. 查找和替换内容
# 找到章节位置
paragraphs = doc.paragraphs
for i, para in enumerate(paragraphs):
if "章节标题" in para.text:
# 找到该章节的内容段落
j = i + 1
content_paras = []
while j < len(paragraphs):
next_text = paragraphs[j].text.strip()
if next_text.startswith("下个章节"):
break
content_paras.append(paragraphs[j])
j += 1
# 删除旧内容
for p in reversed(content_paras):
doc._element.body.remove(p._element)
# 插入新表格
table = create_table(doc, headers, rows)
table._element.getparent().insert(
paragraphs[i]._element.getparent().index(paragraphs[i]._element) + 1,
table._element
)
break# -*- coding: utf-8 -*-
"""
DOCX文档美化脚本模板
用于将Word文档中的内容转换为专业表格格式
"""
import sys
sys.stdout.reconfigure(encoding='utf-8')
from docx import Document
from docx.shared import Pt, RGBColor
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
import glob
import re
# ============ 配置区域 ============
INPUT_FILE = r"输入文档路径.docx"
OUTPUT_DIR = r"输出目录"
SECTION_TITLE = "章节标题" # 如 "3.1 实体识别"
# ================================
# ============ 样式函数 ============
def set_cell_border(cell, **kwargs):
tc = cell._tc
tcPr = tc.get_or_add_tcPr()
tcBorders = OxmlElement('w:tcBorders')
for edge in ('top', 'left', 'bottom', 'right'):
edge_data = kwargs.get(edge)
if edge_data:
border = OxmlElement(f'w:{edge}')
border.set(qn('w:val'), edge_data.get('val', 'single'))
border.set(qn('w:sz'), str(edge_data.get('sz', 4)))
border.set(qn('w:color'), edge_data.get('color', '000000'))
tcBorders.append(border)
tcPr.append(tcBorders)
def set_cell_background(cell, color="4472C4"):
tc = cell._tc
tcPr = tc.get_or_add_tcPr()
shd = OxmlElement('w:shd')
shd.set(qn('w:fill'), color)
tcPr.append(shd)
def format_table(table):
"""应用表格样式"""
border_props = {'val': 'single', 'sz': 4, 'color': '000000'}
for row in table.rows:
for cell in row.cells:
set_cell_border(cell, top=border_props, left=border_props,
bottom=border_props, right=border_props)
for cell in table.rows[0].cells:
set_cell_background(cell, "4472C4")
for paragraph in cell.paragraphs:
paragraph.alignment = 1
for run in paragraph.runs:
run.font.size = Pt(11)
run.font.bold = True
run.font.color.rgb = RGBColor(255, 255, 255)
for i, row in enumerate(table.rows[1:], 1):
bg_color = "E7E6E6" if i % 2 == 0 else "FFFFFF"
for cell in row.cells:
set_cell_background(cell, bg_color)
for paragraph in cell.paragraphs:
for run in paragraph.runs:
run.font.size = Pt(10)
def create_table(doc, headers, rows):
"""创建表格"""
table = doc.add_table(rows=len(rows) + 1, cols=len(headers))
for j, h in enumerate(headers):
table.rows[0].cells[j].text = h
for i, row_data in enumerate(rows):
for j, text in enumerate(row_data):
table.rows[i + 1].cells[j].text = text
format_table(table)
return table
def get_next_version(path):
"""获取下一个版本号"""
files = glob.glob(path + '/*v0.*.docx') + glob.glob(path + '/*v1.*.docx')
versions = []
for f in files:
m = re.search(r'v(\d+)\.(\d+)', f)
if m:
versions.append((int(m.group(1)), int(m.group(2))))
if not versions:
return 'v0.2'
versions.sort()
last = versions[-1]
if last[1] < 9:
return f'v{last[0]}.{last[1] + 1}'
else:
return f'v{last[0] + 1}.0'
# ============ 数据定义(根据需要修改)============
TABLE_DATA = [
["列1", "列2", "列3"],
["数据1", "数据2", "数据3"],
["数据4", "数据5", "数据6"],
]
# ============ 主流程 ============
def main():
# 读取文档
doc = Document(INPUT_FILE)
# 获取版本号
version = get_next_version(OUTPUT_DIR)
print(f"版本号: {version}")
# 找到章节并替换
paragraphs = doc.paragraphs
for i, para in enumerate(paragraphs):
if SECTION_TITLE in para.text:
print(f"找到章节: {SECTION_TITLE}")
# 创建表格
table = create_table(doc, TABLE_DATA[0], TABLE_DATA[1:])
# 插入表格
table._element.getparent().insert(
para._element.getparent().index(para._element) + 1,
table._element
)
break
# 保存
output_path = f"{OUTPUT_DIR}/文档-{version}.docx"
doc.save(output_path)
print(f"保存到: {output_path}")
if __name__ == "__main__":
main()