You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Pandas透视表导出至Word文档并保留格式(附示例)

如何将Pandas透视表导出到Word并保留格式

没问题,我来一步步教你怎么把Pandas生成的透视表导出到Word文档,还能完整保留原有的格式。咱们从准备工作到完整示例一步步来,确保你能直接复用代码。

准备工作:安装必要的库

你需要用到两个核心库:

  • pandas:用来生成透视表和处理数据格式
  • python-docx:用来创建、编辑Word文档

打开终端执行以下命令安装:

pip install pandas python-docx

完整实现步骤与示例

下面我用一个销售数据的例子,演示从生成透视表到导出带格式Word文档的全流程。

步骤1:生成透视表

首先创建示例数据,并用pd.pivot_table生成带总计的透视表:

import pandas as pd
from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
import html

# 构造示例销售数据
data = {
    '地区': ['华东', '华东', '华南', '华南', '华北', '华北'],
    '产品': ['A', 'B', 'A', 'B', 'A', 'B'],
    '季度': ['Q1', 'Q2', 'Q1', 'Q2', 'Q1', 'Q2'],
    '销售额': [12000, 8000, 15000, 9000, 10000, 7000]
}
df = pd.DataFrame(data)

# 创建带总计的透视表
pivot_table = pd.pivot_table(
    df,
    values='销售额',
    index=['地区', '产品'],
    columns=['季度'],
    aggfunc='sum',
    margins=True,
    margins_name='总计'
)

步骤2:自定义透视表格式(保留原有样式)

用Pandas的Styler对象设置透视表的样式,比如表头加粗、居中、背景色,总计行高亮,数值千分位格式化等,这些设置会在导出时完整保留:

def style_pivot_table(styler):
    # 设置表头样式:加粗、居中、浅灰背景
    styler.set_table_styles([
        {'selector': 'th', 'props': [('font-weight', 'bold'), ('text-align', 'center'), ('background-color', '#f0f0f0')]},
        # 所有单元格居中对齐
        {'selector': 'td', 'props': [('text-align', 'center')]},
        # 总计行样式:加粗、浅蓝色背景
        {'selector': 'tr:last-child', 'props': [('font-weight', 'bold'), ('background-color', '#cce5ff')]}
    ])
    # 格式化销售额为千分位格式
    styler.format('{:,.0f}', subset=pivot_table.columns[:-1])
    styler.format('{:,.0f}', subset=['总计'])
    return styler

# 应用样式到透视表
styled_pivot = style_pivot_table(pivot_table.style)

步骤3:将带格式透视表转为HTML

Styler对象可以直接导出为HTML,这是保留格式的关键——HTML会完整记录所有样式信息,方便后续导入Word:

html_table = styled_pivot.to_html()

步骤4:将HTML表格插入到Word文档

用python-docx创建Word文档,然后将HTML表格插入进去,同时可以设置文档的字体、标题等:

# 创建新的Word文档
doc = Document()

# 添加居中的标题
title = doc.add_heading('销售数据透视表', level=1)
title.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER

# 添加说明段落
doc.add_paragraph('以下是各地区各产品的季度销售额汇总(含总计):')

# 解析HTML表格并插入到Word中
from docx.oxml import parse_xml
from docx.oxml.ns import qn

# 临时创建一个段落用于插入HTML(后续会删除)
temp_paragraph = doc.add_paragraph()
run = temp_paragraph.add_run()

# 将HTML转换为docx可识别的XML元素
table_xml = parse_xml(html_table.encode('utf-8'))

# 将表格插入到文档中(放在临时段落之后)
doc._body._body.insert_element_after(table_xml, temp_paragraph._element)

# 删除临时段落
doc._body._body.remove(temp_paragraph._element)

# 统一设置文档字体(可选,让显示更美观)
for paragraph in doc.paragraphs:
    for run in paragraph.runs:
        run.font.name = '微软雅黑'
        run._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')
        run.font.size = Pt(10)

# 保存Word文档
doc.save('销售透视表.docx')

print("透视表已成功导出到Word文档,格式完整保留!")

关键说明

  • 如果你需要更复杂的格式(比如合并单元格、自定义边框),可以在style_pivot_table函数中扩展Styler的样式设置,或者在插入Word后用python-docx的表格API进一步调整。
  • 这种方法不依赖Office环境,跨平台可用(Windows、Mac、Linux都能运行)。

内容的提问来源于stack exchange,提问作者Swathi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:09:54