目录
Word 文档中的表格是一种强大且灵活的数据组织和展示工具,它能将信息以行和列的形式有序地排列,使文档内容更加清晰易读。通过创建表格,我们可以轻松地将数据以结构化的方式呈现出来,而提取表格数据则为后续的数据分析和二次利用提供了便利。这篇文章将探讨如何使用Python在Word文档中创建表格和提取表格数据。
- 使用Python在Word中创建预定义行和列的表格
- 使用Python在Word中动态创建表格
- 使用Python在Word中提取表格数据
安装Python Word库
在Python中,我们可以使用Spire.Doc for Python库来操作Word文档中的表格,包括创建表格、填充数据、设置格式、提取表格数据等。
Spire.Doc for Python主要用于在Python应用程序中创建、读取、编辑和转换Word文件。它可以处理各种Word格式,包括Doc、Docx、Docm、Dot、Dotx、Dotm等。此外,还可以将Word文档转换为其他类型的文件格式,如Word转PDF、Word转RTF、Word转HTML、Word转文本、Word转图片、Word转OFD/XPS/PostScript。
你可以通过在终端运行以下命令来从PyPI安装Spire.Doc for Python:
pip install Spire.Doc
使用Python在Word中创建预定义行和列的表格
Spire.Doc for Python提供了Section.AddTable() 方法,用于向Word文档添加表格。表格添加后,你可以使用Table.ResetCells(int, int) 方法来定义它的行数和列数。最后再向表格的单元格中填充数据。核心步骤如下:
- 创建Document类的实例。
- 使用Document.AddSection()方法给文档添加一个节。
- 定义表格数据并将其存放至一个二维数组中。
- 使用Section.AddTable()方法给节添加一个表格,然后使用Table.ResetCells(int, int)方法来定义表格的行数和列数。
- 遍历表格数据并将其填充到表格单元格中,同时设置表头和数据行的格式。
- 使用Document.SaveToFile()方法保存结果文档。
完整代码:
from spire.doc import *
from spire.doc.common import *
# 创建 Document 类的实例
document = Document()
# 添加一个节到文档中
section = document.AddSection()
# 设置节的页边距
section.PageSetup.Margins.All = 72.0
# 向节添加一个段落
para = section.AddParagraph()
# 设置段落文本对齐方式
para.Format.HorizontalAlignment = HorizontalAlignment.Center
# 向段落添加文本
txtRange = para.AppendText("员工薪资表")
txtRange.CharacterFormat.FontName = "宋体"
txtRange.CharacterFormat.FontSize = 16
txtRange.CharacterFormat.Bold = True
# 定义表格数据
table_data = [
["员工姓名", "部门", "职位", "薪资"],
["张三", "销售部", "销售经理", "75000元"],
["李四", "市场部", "市场协调员", "55000元"],
["王五", "IT部", "软件工程师", "85000元"],
["赵六", "人力资源部", "HR专员", "60000元"],
["陈七", "财务部", "财务分析师", "70000元"]
]
# 向节添加一个表格
table = section.AddTable(True)
# 指定表格的行数和列数
table.ResetCells(len(table_data), len(table_data[0]))
# 向表格添加数据
for r, row in enumerate(table_data):
for c, cell_data in enumerate(row):
# 向当前单元格添加一个段落
para = table.Rows[r].Cells[c].AddParagraph()
if r == 0: # 表头行
# 设置表头行的高度,背景色和文本对齐方式
table.Rows[r].Height = 23
table.Rows[r].RowFormat.BackColor = Color.FromArgb(1, 142, 170, 219)
para.Format.HorizontalAlignment = HorizontalAlignment.Center
table.Rows[r].Cells[c].CellFormat.VerticalAlignment = VerticalAlignment.Middle
# 向表头行填充数据并设置字体名称,大小,颜色和加粗
txtRange = para.AppendText(cell_data)
txtRange.CharacterFormat.FontName = "宋体"
txtRange.CharacterFormat.FontSize = 14
txtRange.CharacterFormat.TextColor = Color.get_White()
txtRange.CharacterFormat.Bold = True
else:
# 设置数据行的高度和文本对齐方式
table.Rows[r].Height = 20
para.Format.HorizontalAlignment = HorizontalAlignment.Center
table.Rows[r].Cells[c].CellFormat.VerticalAlignment = VerticalAlignment.Middle
# 向数据行填充数据并设置字体名称和大小
txtRange = para.AppendText(cell_data)
txtRange.CharacterFormat.FontName = "宋体"
txtRange.CharacterFormat.FontSize = 11
# 保存文档
document.SaveToFile("创建表格.docx", FileFormat.Docx2013)
document.Close()
使用Python在Word中动态创建表格
除了创建具有预定义行和列的静态表格,你还可以通过动态添加行和单元格的方式来创建表格。这种方式主要用到Table.AddRow()和TableRow.AddCell()两个方法。核心步骤如下:
- 创建Document类的实例。
- 使用Document.AddSection()方法给文档添加一个节。
- 定义表格数据并将其存放至一个二维数组中。
- 使用Section.AddTable()方法给节添加一个表格。
- 使用Table.AddRow()向表格添加行。
- 使用TableRow.AddCell()方法向行添加单元格。
- 使用TableCell.AddParagraph().AppendText()方法向单元格填充数据,然后设置格式。
- 重复以上第5-7个步骤向表格添加行和单元格,并填充数据。
- 使用Document.SaveToFile()方法保存结果文档。
完整代码:
from spire.doc import *
from spire.doc.common import *
# 创建 Document 类的实例
document = Document()
# 添加一个节到文档
section = document.AddSection()
# 设置节的页边距
section.PageSetup.Margins.All = 72.0
# 添加一个表格到节
table = section.AddTable()
# 动态添加行和单元格到表格
row = table.AddRow()
cell = row.AddCell()
cell.SetCellWidth(200, CellWidthType.Point)
txtRange = cell.AddParagraph().AppendText("产品")
txtRange.CharacterFormat.FontName = "宋体"
txtRange.CharacterFormat.FontSize = 13
txtRange.CharacterFormat.Bold = True
cell = row.AddCell()
cell.SetCellWidth(200, CellWidthType.Point)
txtRange = cell.AddParagraph().AppendText("单价")
txtRange.CharacterFormat.FontName = "宋体"
txtRange.CharacterFormat.FontSize = 13
txtRange.CharacterFormat.Bold = True
row = table.AddRow(True, False)
cell = row.AddCell()
cell.SetCellWidth(200, CellWidthType.Point)
txtRange = cell.AddParagraph().AppendText("显示器")
txtRange.CharacterFormat.FontName = "宋体"
cell = row.AddCell()
cell.SetCellWidth(200, CellWidthType.Point)
txtRange = cell.AddParagraph().AppendText("500")
txtRange.CharacterFormat.FontName = "宋体"
row = table.AddRow(True, False)
cell = row.AddCell()
cell.SetCellWidth(200, CellWidthType.Point)
txtRange = cell.AddParagraph().AppendText("键盘")
txtRange.CharacterFormat.FontName = "宋体"
cell = row.AddCell()
cell.SetCellWidth(200, CellWidthType.Point)
txtRange = cell.AddParagraph().AppendText("80")
txtRange.CharacterFormat.FontName = "宋体"
row = table.AddRow(True, False)
cell = row.AddCell()
cell.SetCellWidth(200, CellWidthType.Point)
txtRange = cell.AddParagraph().AppendText("CPU散热器")
txtRange.CharacterFormat.FontName = "宋体"
cell = row.AddCell()
cell.SetCellWidth(200, CellWidthType.Point)
txtRange = cell.AddParagraph().AppendText("20")
txtRange.CharacterFormat.FontName = "宋体"
row = table.AddRow(True, False)
cell = row.AddCell()
cell.SetCellWidth(200, CellWidthType.Point)
txtRange = cell.AddParagraph().AppendText("鼠标")
txtRange.CharacterFormat.FontName = "宋体"
cell = row.AddCell()
cell.SetCellWidth(200, CellWidthType.Point)
txtRange = cell.AddParagraph().AppendText("120")
txtRange.CharacterFormat.FontName = "宋体"
# 应用表格样式
table.ApplyStyle(DefaultTableStyle.MediumGrid1Accent5)
# 自动调整表格大小以适应窗口
table.AutoFit(AutoFitBehaviorType.AutoFitToWindow)
# 保存文档
document.SaveToFile("动态创建表格.docx", FileFormat.Docx2013)
document.Close()
使用Python在Word中提取表格数据
要提取Word文档中的表格数据,首先需要循环遍历文档中的表格,然后循环遍历表格中的单元格并获取其中的数据。核心步骤如下:
- 创建Document类的实例。
- 使用Document.LoadFromFile()方法加载Word文档。
- 循环遍历文档中的所有节和每个节中的所有表格。
- 循环遍历表格中的所有行。
- 循环遍历每行的单元格,获取单元格数据并将其添加至列表。
- 将列表数据保存至文本文件。
完整代码:
from spire.doc import *
from spire.doc.common import *
# 创建 Document 实例
document = Document()
# 加载 Word 文档
document.LoadFromFile("创建表格.docx")
# 保存表格数据的文本文件
output_file = "表格数据.txt"
# 循环遍历文档中的所有节和每个节中的所有表格
for section_idx in range(document.Sections.Count):
section = document.Sections[section_idx]
for table_idx in range(section.Tables.Count):
table = section.Tables[table_idx]
# 创建一个列表来存储每个表格的数据
data_list = []
# 循环遍历表格的行
for row_idx in range(table.Rows.Count):
row = table.Rows[row_idx]
row_data = []
# 循环遍历每个行的单元格
for cell_idx in range(row.Cells.Count):
cell = row.Cells[cell_idx]
# 循环遍历每个单元格中的段落
for para_idx in range(cell.Paragraphs.Count):
paragraph = cell.Paragraphs[para_idx]
# 将每个单元格的文本添加到行数据列表中
row_data.append(paragraph.Text.strip())
# 将行数据添加到表格数据列表中,并添加制表符分隔
data_list.append("\t".join(row_data))
# 将当前表格的数据写入文本文件,并添加换行分隔
with open(output_file, "a", encoding="utf-8") as text_file:
text_file.write("\n".join(data_list))
text_file.write("\n")
# 关闭文档
document.Close()
以上就是使用Python在Word中创建和提取表格的全部内容,希望对你有所帮助。本文完。