使用代码写 Word 表格

需求是从 Excel 中读取信息,写入下图所示的 Word 表格中
使用代码写 Word 表格

难点:
无法像写入 Excel 单元格一样,把数据填入 Word 表格中。

思路:
1、将 Word 表格模板放到 Excel 中,向 Excel 单元格填入数据,最终将 Excel 中数据加表格放到 Word;
2、直接代码,写 Word 表格,并将数据传入。

这边用的是第二种方法,直接通过 docx 库向 Word 写入表格 + 数据
代码如下:

	  from docx import Document
	  from docx.oxml.ns import qn
	  from docx.shared import Pt
	  from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
	  from docx.enum.table import WD_TABLE_ALIGNMENT

	  # 声明一个word对象
	  doc = Document()
	  # 设置字体样式
	  doc.styles['Normal'].font.name = u'宋体'
	  doc.styles['Normal'].element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
	   # ------添加文档标题-------
	  paragraph = doc.add_paragraph()
	  run = paragraph.add_run("Test")
	  font = run.font
	  # 设置字体大小
	  font.size = Pt(24)
	  # 设置水平居中
	  paragraph_format = paragraph.paragraph_format
	  paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER

	  table = doc.add_table(rows=5, cols=6, style="Table Grid")
	  table.cell(0,0).merge(table.cell(0,5))
	  # table.alignment = WD_TABLE_ALIGNMENT.CENTER
	  table.cell(0,0).text ="测试文档"
	  table.cell(0, 0).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTER    # 第一行表格水平居中
	  table.cell(1,0).text ="姓名"
	  table.cell(1,1).text ="张三"
	  table.cell(1,2).text ="性别"
	  table.cell(1,3).text ="男"
	  table.cell(1,4).text ="年龄"
	  table.cell(1,5).text ="25"
	  table.cell(2,1).merge(table.cell(2,3))     # 合并单元格,从(2,1)到(2,3)
	  table.cell(2,0).text ="公司名称"
	  table.cell(2,1).text ="上海艺赛旗软件股份邮箱公司"
	  table.cell(2,4).text ="职位"
	  table.cell(2,5).text ="售前工程师"
	  table.cell(3,1).merge(table.cell(3,5))
	  table.cell(3,0).text ="家庭住址"
	  table.cell(3,1).text ="不告诉你"
	  table.cell(4,0).text ="手机号"
	  table.cell(4,1).text ="13700000000"
	  table.cell(4,2).text ="邮箱"
	  table.cell(4,3).text ="abc@isearchcom.cn"
	  table.cell(4,4).text ="党员"
	  table.cell(4,5).text ="■是 □否"

	  doc.save('//mac/Home/Desktop/excel_word_poc/test1.docx')

此处,将 Excel 中的数据直接写死了,流程中,可将这些数据以参数的形式传入。
生成的 Word 表格如下:
使用代码写 Word 表格

代码中先生成了一个 5*6 的表格,再将部分单元格进行合并,以达到模板的格式。实现较麻烦,若有更为简便的方格,欢迎交流。