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

news2024/11/25 21:41:38

目录

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1805857.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL Developer迁移第三方数据库单表到Oracle

在SQL Developer中,除可用Migration Wizard迁移第三方数据库到Oracle外,单表的迁移可以用Copy To Oracle ...菜单。右键单击源表即可。 本例的源表为MySQL数据库employees中的表:departments。 Options页面:指定目标库&#xff…

如何将 Windows图片查看器的背景颜色改成浅色(灰白色)?

现在大家基本都在使用Win10系统,我们在双击查看图片时,系统默认使用系统自带的图片(照片)查看器去打开图片。图片查看器的背景色默认是黑色的,如下所示:(因为大家可能会遇到同样的问题&#xff…

pxe自动装机与无人值守

一、pxe与无人值守 pxe:c/s 模式,允许客户端通过网络从远程服务器(服务端)下载引导镜像,加载安装文件,实现自动化安装操作系统。 pxe的优点: 1、规模化 同时装配多台服务器(20多&…

Hive知识体系保姆级教程

一. Hive概览 1.1 hive的简介 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。 其本质是将SQL转换为MapReduce/Spark的任务进行运算,底层由HDFS来提供数据的存储,说白了h…

【wiki知识库】06.文档管理页面的添加--前端Vue部分

📝个人主页:哈__ 期待您的关注 目录 一、🔥今日目标 二、🐻前端Vue模块的改造 BUG修改 1.wangeditor无法展示问题 2.弹窗无法正常关闭问题 2.1 添加admin-doc.vue 2.1.1 点击admin-ebook中的路由跳转到admin-doc 2.2.2 进入…

【DrissionPage】Linux上如何将https改为http

最近有个老板找我做一个自动化的程序,要求部署到Linux上 这是一个http协议的网站,chrome在默认设置下,会将http的网站识别成不安全的内容,然后自动将http转化成https访问 但是,这个http的网站它的加载项里既有http的…

Java | Leetcode Java题解之第132题分割回文串II

题目&#xff1a; 题解&#xff1a; class Solution {public int minCut(String s) {int n s.length();boolean[][] g new boolean[n][n];for (int i 0; i < n; i) {Arrays.fill(g[i], true);}for (int i n - 1; i > 0; --i) {for (int j i 1; j < n; j) {g[i]…

Centos X系统yum安装mysql数据库

安装之前需要将系统自带的mariadb-libs软件包删除。 检查是否存在mariadb-libs包。 yum list installed|grep mariadb-libs 删除mariadb-libs包 yum -y remove mariadb-libs 声明&#xff1a; 系统&#xff1a;CentOS-7-x86_64-DVD-2009 安装为最小化安装&#xff0c;没…

[线程与网络] Java虚拟机常考面试题(线程与网络完结)

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏:&#x1f355; Collection与数据结构 (92平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 &#x1f9c0;线程与…

MySQL: 表的增删改查(基础)

文章目录 1. 注释2. 新增(Create)3. 查询(Retrieve)3.1 全列查询3.2 指定列查询3.3 查询字段为表达式3.4 别名3.5 去重: distinct3.6 排序: order by3.7条件查询3.8 分页查询 4. 修改 (update)5. 删除(delete)6. 内容重点总结 1. 注释 注释&#xff1a;在SQL中可以使用“–空格…

【React】Redux与React - 环境准备

配套工具 在React中使用redux&#xff0c;官方要求安装俩个其他插件 - Redux Toolkit 和 react-redux 配置基础环境 使用 CRA 快速创建 React 项目 npx create-react-app react-redux安装配套工具 npm i reduxjs/toolkit react-redux启动项目 npm run start

python中while循环实现九九乘法表

i 1while i < 9: # 控制行的循环j 1while j < i: # 控制每行的输出print(f"{j}*{i}{j * i}\t", end"")j 1print()i 1运行截图&#xff1a;

图解 Python 编程(12) | 文件和编码方式

&#x1f31e;欢迎来到Python 的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f4c6;首发时间&#xff1a;&#x1f339;2024年6月9日&am…

《编译原理》期末考试复习手写笔记(二)+真题(第四、五、六章)+课后习题答案

第四章考试题型【自顶向下语法分析】 考点梳理&#xff1a; 1.语法分析程序的设计 2.确定的自顶向下分析思想2.1 FIRST集合 2.2 FOLLOW集合 2. 3 SELECT集合 2. 4 LL(1)文法 3.LL(1)文法的判别 如何消除左公因子? 如何消除左递归? 4.非LL(1)到LL(1)文法的等价变换 5.LL(1)分…

Web后端开发(请求-简单参数)(一)

原始方式&#xff1a; 在原始的web程序中&#xff0c;获取请求参数&#xff0c;需要通过HttpServletRequest 对象手动获取。 RequestMapping("/simpleParam") public String simpleParam(HttpServletRequest request){//获取请求参数String name request.getParame…

物资材料管理系统建设方案(Word)—实际项目方案

二、 项目概述 2.1 项目背景 2.2 现状分析 2.2.1 业务现状 2.2.2 系统现状 三、 总体需求 3.1 系统范围 3.2 系统功能 3.3 用户分析 3.4 假设与依赖关系 四、 功能需求 4.4.11.7 非功能性需求 五、 非功能性需求 5.1 用户界面需求 5.2 软硬件环境需求 5.3 产品质量需求 5.4 接口…

springAOP 使用aop代替SqlsessionUtil业务层操作

在Maven框架pom配置文件中导入spring相关依赖&#xff1a; <dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><dependency…

爬虫可以不必自己写,使用ChatGPT编写抓取电影评论数据脚本

经常去新华书店看看有没有什么新书上架&#xff0c;还是更新挺及时的&#xff0c;可以反映新的技术趋势。这不&#xff0c;最近就看到了这本《巧用 ChatGPT 快速搞定数据分析》&#xff0c;作者是个大牛&#xff0c;第一次看到prompt可以这么写&#xff0c;得写这么长&#xff…

LeMeViT:具有可学习元令牌的高效ViT

本文提出使用可学习的元令牌来制定稀疏令牌&#xff0c;这有效地学习了关键信息&#xff0c;同时提高了推理速度。从技术上讲&#xff0c;主题标记首先通过交叉关注从图像标记中初始化。提出了双交叉注意&#xff08;DCA&#xff09;来促进图像令牌和元令牌之间的信息交换&…

【JS】理解闭包及其应用

历史小剧场 明朝灭亡&#xff0c;并非是简单的政治问题&#xff0c;事实上&#xff0c;这是世界经济史上的一个重要案例。 所谓没钱&#xff0c;就是没有白银。----《明朝那些事儿》 什么是闭包&#xff1f; 闭包就是指有权访问另一个函数作用域中变量的函数 闭包变量存储位置&…