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

目录

[安装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转PDFWord转RTFWord转HTMLWord转文本Word转图片Word转OFD/XPS/PostScript

你可以通过在终端运行以下命令来从PyPI安装Spire.Doc for Python:

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()**方法保存结果文档。

完整代码:

python 复制代码
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()**方法保存结果文档。

完整代码:

python 复制代码
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文档。
  • 循环遍历文档中的所有节和每个节中的所有表格。
  • 循环遍历表格中的所有行。
  • 循环遍历每行的单元格,获取单元格数据并将其添加至列表。
  • 将列表数据保存至文本文件。

完整代码:

python 复制代码
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中创建和提取表格的全部内容,希望对你有所帮助。本文完。

相关推荐
笨鸟先飞,勤能补拙1 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
长和信泰光伏储能2 小时前
京津冀光伏发电:绿色能源的未来之路
python·能源
浦信仿真大讲堂3 小时前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
Gu Gu Study3 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
卷无止境4 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境4 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd1234 小时前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy12393102165 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb005 小时前
一个项目带你入门AI应用开发01
python
0566465 小时前
Python康复训练——常用标准库
开发语言·python·学习