本文目录导读:

我来详细介绍几种在Python中生成Word文档表格的方法:
使用 python-docx 库 (最常用)
安装
pip install python-docx
基本用法
from docx import Document
from docx.shared import Inches, Pt, Cm
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn
def create_simple_table():
# 创建文档
doc = Document()
# 添加标题
doc.add_heading('员工信息表', level=1)
# 创建表格 (2行3列)
table = doc.add_table(rows=2, cols=3)
table.style = 'Table Grid' # 应用表格样式
# 填充表头
headers = ['姓名', '年龄', '部门']
for i, header in enumerate(headers):
cell = table.rows[0].cells[i]
cell.text = header
# 设置表头加粗
for paragraph in cell.paragraphs:
for run in paragraph.runs:
run.bold = True
# 填充数据
data = ['张三', '28', '技术部']
for i, value in enumerate(data):
table.rows[1].cells[i].text = value
doc.save('simple_table.docx')
create_simple_table()
从数据源创建表格
from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.table import WD_TABLE_ALIGNMENT
def create_from_data():
doc = Document()
doc.add_heading('销售数据报表', level=1)
# 准备数据
data = [
['产品', '销量', '单价', '总价'],
['手机', '100', '2999', '299900'],
['电脑', '50', '4999', '249950'],
['平板', '80', '1999', '159920'],
]
# 创建表格
table = doc.add_table(rows=len(data), cols=len(data[0]))
table.style = 'Light Grid Accent 1'
table.alignment = WD_TABLE_ALIGNMENT.CENTER
# 填充数据
for row_idx, row_data in enumerate(data):
for col_idx, cell_value in enumerate(row_data):
cell = table.rows[row_idx].cells[col_idx]
cell.text = str(cell_value)
doc.save('sales_table.docx')
create_from_data()
高级表格样式设置
from docx import Document
from docx.shared import Inches, Pt, Cm, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn, nsdecls
from docx.oxml import parse_xml
def create_styled_table():
doc = Document()
doc.add_heading('格式化表格', level=1)
# 创建表格
table = doc.add_table(rows=4, cols=4)
table.style = 'Table Grid'
# 设置列宽
for row in table.rows:
row.cells[0].width = Cm(3)
row.cells[1].width = Cm(4)
row.cells[2].width = Cm(3)
row.cells[3].width = Cm(4)
# 填充数据
headers = ['日期', '项目', '金额', '备注']
data = [
['2024-01-01', '项目A', '1000', '完成'],
['2024-01-02', '项目B', '2000', '进行中'],
['2024-01-03', '项目C', '3000', '待确认'],
]
# 设置表头样式
for i, header in enumerate(headers):
cell = table.rows[0].cells[i]
cell.text = header
cell.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
# 设置表头背景色
shading = parse_xml(f'<w:shd {nsdecls("w")} w:fill="4472C4"/>')
cell._tc.get_or_add_tcPr().append(shading)
# 设置字体颜色
for paragraph in cell.paragraphs:
for run in paragraph.runs:
run.font.color.rgb = RGBColor(255, 255, 255)
run.font.bold = True
# 填充数据行
for row_idx, row_data in enumerate(data, 1):
for col_idx, value in enumerate(row_data):
cell = table.rows[row_idx].cells[col_idx]
cell.text = value
cell.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
# 交替行背景色
if row_idx % 2 == 0:
shading = parse_xml(f'<w:shd {nsdecls("w")} w:fill="D9E2F3"/>')
cell._tc.get_or_add_tcPr().append(shading)
doc.save('styled_table.docx')
create_styled_table()
合并单元格
from docx import Document
from docx.shared import Pt
def create_merged_table():
doc = Document()
doc.add_heading('合并单元格表格', level=1)
# 创建表格 (5行4列)
table = doc.add_table(rows=5, cols=4)
table.style = 'Table Grid'
# 填充表头
headers = ['分类', '项目', '数值', '备注']
for i, header in enumerate(headers):
table.rows[0].cells[i].text = header
# 合并单元格示例
# 合并第一列的第2-4行
table.rows[1].cells[0].merge(table.rows[3].cells[0])
# 填充合并后的单元格
table.rows[1].cells[0].text = '总分类'
# 填充其他数据
data = [
['', '子项1', '100', '正常'],
['', '子项2', '200', '正常'],
['', '子项3', '300', '异常'],
]
for row_idx, row_data in enumerate(data, 1):
for col_idx, value in enumerate(row_data):
if col_idx > 0: # 跳过已合并的列
table.rows[row_idx].cells[col_idx].text = value
doc.save('merged_table.docx')
create_merged_table()
从Excel数据创建Word表格
from docx import Document
import pandas as pd
def create_from_excel():
doc = Document()
doc.add_heading('从Excel导入数据', level=1)
# 读取Excel数据 (假设有sales.xlsx文件)
df = pd.read_excel('sales.xlsx')
# 创建表格
table = doc.add_table(rows=len(df) + 1, cols=len(df.columns))
table.style = 'Light Grid Accent 1'
# 写入表头
for col_idx, column in enumerate(df.columns):
table.rows[0].cells[col_idx].text = str(column)
# 写入数据
for row_idx, row in df.iterrows():
for col_idx, value in enumerate(row):
table.rows[row_idx + 1].cells[col_idx].text = str(value)
doc.save('from_excel.docx')
# create_from_excel() # 取消注释使用
完整示例:生成复杂报表
from docx import Document
from docx.shared import Inches, Pt, Cm, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT
from docx.oxml.ns import qn, nsdecls
from docx.oxml import parse_xml
def create_complex_report():
doc = Document()
# 标题= doc.add_heading('季度销售报告', level=1)alignment = WD_ALIGN_PARAGRAPH.CENTER
# 副标题
subtitle = doc.add_paragraph('2024年第一季度')
subtitle.alignment = WD_ALIGN_PARAGRAPH.CENTER
# 创建数据
headers = ['产品', '销量', '单价', '销售额', '利润率']
data = [
['手机', 1200, 2999, 3598800, '15%'],
['电脑', 800, 4999, 3999200, '12%'],
['平板', 1500, 1999, 2998500, '18%'],
['配件', 3000, 299, 897000, '25%'],
]
# 创建表格
table = doc.add_table(rows=len(data) + 2, cols=len(headers))
table.style = 'Table Grid'
table.alignment = WD_TABLE_ALIGNMENT.CENTER
# 设置表头
for i, header in enumerate(headers):
cell = table.rows[0].cells[i]
cell.text = header
cell.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
# 表头样式
shading = parse_xml(f'<w:shd {nsdecls("w")} w:fill="2F5496"/>')
cell._tc.get_or_add_tcPr().append(shading)
for paragraph in cell.paragraphs:
for run in paragraph.runs:
run.font.color.rgb = RGBColor(255, 255, 255)
run.font.bold = True
run.font.size = Pt(11)
# 填充数据
for row_idx, row_data in enumerate(data, 1):
for col_idx, value in enumerate(row_data):
cell = table.rows[row_idx].cells[col_idx]
cell.text = str(value)
cell.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
# 交替行颜色
if row_idx % 2 == 0:
shading = parse_xml(f'<w:shd {nsdecls("w")} w:fill="D6E4F0"/>')
cell._tc.get_or_add_tcPr().append(shading)
# 添加汇总行
total_row = len(data) + 1
table.rows[total_row].cells[0].text = '合计'
table.rows[total_row].cells[1].text = str(sum(row[1] for row in data))
table.rows[total_row].cells[3].text = str(sum(row[3] for row in data))
# 汇总行样式
for cell in table.rows[total_row].cells:
for paragraph in cell.paragraphs:
for run in paragraph.runs:
run.font.bold = True
run.font.color.rgb = RGBColor(47, 84, 150)
shading = parse_xml(f'<w:shd {nsdecls("w")} w:fill="B4C6E7"/>')
cell._tc.get_or_add_tcPr().append(shading)
# 保存文档
doc.save('complex_report.docx')
print("报告已生成:complex_report.docx")
create_complex_report()
注意事项
-
安装依赖:
pip install python-docx
-
表格样式:python-docx提供了多种内置样式,如:
Table Grid- 标准网格Light Grid Accent 1- 带颜色的网格Medium Shading 1 Accent 1- 中等阴影
-
性能考虑:处理大量数据时,逐行写入可能会较慢,可以考虑批量处理。
-
版本兼容性:确保python-docx版本兼容您的Word版本。
这些示例涵盖了从基础到高级的各种表格生成场景,可以根据实际需求选择合适的方案。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播