
本文详解如何枚举、预览并正确使用 python-docx 默认模板中所有可用的表格样式,通过程序化生成样式对照表,帮助开发者快速选择合适的表格外观。
在使用 python-docx 创建 Word 文档时,为表格设置样式(如 'Table Grid')可显著提升文档专业度。但官方文档并未直接提供完整样式名称列表,也未内置 document.styles.table_styles 这类便捷接口——表格样式需从文档的默认模板(default.docx)中动态加载,且仅当样式实际存在于当前 Document 对象的样式库中时才可被赋值。
幸运的是,python-docx 的默认模板(位于 docx/templates/default.docx)预置了约 20+ 种常用表格样式,包括 'Table Grid'、'Light Shading'、'Medium List 1'、'Dark List' 等。要完整列出并预览它们,最可靠的方式是:创建一个空白文档 → 遍历其 styles 集合中类型为 WD_STYLE_TYPE.TABLE 的样式 → 为每个样式生成一个示例表格。
以下是一个完整的样式枚举与可视化脚本:
from docx import Document
from docx.enum.style import WD_STYLE_TYPE
from docx.shared import Pt
# 创建新文档用于样式探测
doc = Document()
# 提取所有表格样式名称(去重 + 排序)
table_style_names = [
style.name for style in doc.styles
if style.type == WD_STYLE_TYPE.TABLE
]
table_style_names.sort() # 按字母序便于浏览
print("✅ 共检测到", len(table_style_names), "个可用表格样式:")
for i, name in enumerate(table_style_names, 1):
print(f"{i:2d}. {name}")
# 可选:生成样式对照文档(推荐用于实际选型)
preview_doc = Document()
preview_doc.add_heading('Python-docx 表格样式预览', level=1)
for style_name in table_style_names:
preview_doc.add_paragraph(f"▸ 样式名称:'{style_name}'", style='Heading 3')
# 创建 2×2 示例表格
table = preview_doc.add_table(rows=2, cols=2)
table.style = style_name # 自动跳过无效样式(不会报错)
table.autofit = False
table.allow_autofit = False
# 填充内容增强可读性
table.cell(0, 0).text = '行1列1'
table.cell(0, 1).text = '行1列2'
table.cell(1, 0).text = '行2列1'
table.cell(1, 1).text = '行2列2'
# 统一单元格宽度(避免因样式自动缩放导致视觉混乱)
for row in table.rows:
for cell in row.cells:
cell.width = Pt(120)
preview_doc.save('table_styles_preview.docx')
print("\n? 已生成预览文档:table_styles_preview.docx —— 打开即可直观对比所有样式效果!")? 关键注意事项:
立即学习“Python免费学习笔记(深入)”;
- ✅ doc.styles 返回的是当前文档所继承的完整样式集(含段落、字符、表格等),务必用 WD_STYLE_TYPE.TABLE 过滤;
- ⚠️ 并非所有样式名都“开箱即用”:若文档由自定义模板创建,或样式被手动删除,则对应名称将不在列表中;
- ⚠️ 赋值 table.style = 'xxx' 时,若 'xxx' 不存在,python-docx 静默忽略(不抛异常),表格将回退至默认无样式状态——因此建议先校验再使用;
- ? 实际项目中,推荐将常用样式名存为常量(如 TABLE_STYLE_LIGHT_SHADING = 'Light Shading Accent 1'),提高可维护性;
- ? 如需扩展样式库,可将 .dotx 模板路径传入 Document(template_path),再从中提取样式。
掌握该方法后,你不仅能快速探索全部内置选项,还能构建自动化样式测试流程,大幅提升文档生成的可控性与一致性。











