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

相关推荐
云空16 分钟前
《Python 与 SQLite:强大的数据库组合》
数据库·python·sqlite
凤枭香1 小时前
Python OpenCV 傅里叶变换
开发语言·图像处理·python·opencv
测试杂货铺1 小时前
外包干了2年,快要废了。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
艾派森1 小时前
大数据分析案例-基于随机森林算法的智能手机价格预测模型
人工智能·python·随机森林·机器学习·数据挖掘
小码的头发丝、2 小时前
Django中ListView 和 DetailView类的区别
数据库·python·django
Chef_Chen2 小时前
从0开始机器学习--Day17--神经网络反向传播作业
python·神经网络·机器学习
千澜空3 小时前
celery在django项目中实现并发任务和定时任务
python·django·celery·定时任务·异步任务
斯凯利.瑞恩3 小时前
Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户附数据代码
python·决策树·随机森林
yannan201903133 小时前
【算法】(Python)动态规划
python·算法·动态规划
蒙娜丽宁3 小时前
《Python OpenCV从菜鸟到高手》——零基础进阶,开启图像处理与计算机视觉的大门!
python·opencv·计算机视觉