万有斥力 发表于 2024-6-11 09:57:41

使用Python在Word中创建和提取表格

目次
安装Python Word库
使用Python在Word中创建预定义行和列的表格
使用Python在Word中动态创建表格
使用Python在Word中提取表格数据
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))

# 向表格添加数据
for r, row in enumerate(table_data):
    for c, cell_data in enumerate(row):
      # 向当前单元格添加一个段落
      para = table.Rows.Cells.AddParagraph()
      
      if r == 0:# 表头行
            # 设置表头行的高度,背景色和文本对齐方式
            table.Rows.Height = 23
            table.Rows.RowFormat.BackColor = Color.FromArgb(1, 142, 170, 219)
            para.Format.HorizontalAlignment = HorizontalAlignment.Center
            table.Rows.Cells.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.Height = 20
            para.Format.HorizontalAlignment = HorizontalAlignment.Center
            table.Rows.Cells.CellFormat.VerticalAlignment = VerticalAlignment.Middle
            # 向数据行填充数据并设置字体名称和大小
            txtRange = para.AppendText(cell_data)
            txtRange.CharacterFormat.FontName = "宋体"
            txtRange.CharacterFormat.FontSize = 11

# 保存文档
document.SaveToFile("创建表格.docx", FileFormat.Docx2013)
document.Close()
https://img-blog.csdnimg.cn/direct/a00e2cd5efee4778807a35a2e00ac388.png
使用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()
https://img-blog.csdnimg.cn/direct/4a6adca0cd8743c49d7d0321af87cf29.png

使用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
    for table_idx in range(section.Tables.Count):
      table = section.Tables
      
      # 创建一个列表来存储每个表格的数据
      data_list = []
      
      # 循环遍历表格的行
      for row_idx in range(table.Rows.Count):
            row = table.Rows
            row_data = []
            # 循环遍历每个行的单元格
            for cell_idx in range(row.Cells.Count):
                cell = row.Cells
                # 循环遍历每个单元格中的段落
                for para_idx in range(cell.Paragraphs.Count):
                  paragraph = cell.Paragraphs
                  # 将每个单元格的文本添加到行数据列表中
                  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中创建和提取表格的全部内容,盼望对你有所帮助。本文完。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 使用Python在Word中创建和提取表格