使用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[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 = 23table.Rows[r].RowFormat.BackColor = Color.FromArgb(1, 142, 170, 219)para.Format.HorizontalAlignment = HorizontalAlignment.Centertable.Rows[r].Cells[c].CellFormat.VerticalAlignment = VerticalAlignment.Middle# 向表头行填充数据并设置字体名称,大小,颜色和加粗txtRange = para.AppendText(cell_data)txtRange.CharacterFormat.FontName = "宋体"txtRange.CharacterFormat.FontSize = 14txtRange.CharacterFormat.TextColor = Color.get_White()txtRange.CharacterFormat.Bold = Trueelse:# 设置数据行的高度和文本对齐方式table.Rows[r].Height = 20para.Format.HorizontalAlignment = HorizontalAlignment.Centertable.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 = Truerow = 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.mzph.cn/pingmian/22483.shtml

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

相关文章

全新STC12C5A60S2单片机+LCD19264大屏万年历农历生肖节气节日显示+闹钟+温湿度+台灯

资料下载地址:全新STC12C5A60S2单片机LCD19264大屏万年历农历生肖节气节日显示闹钟温湿度台灯 这是旧版 退役拆解了 新版 与电路图所示 共设置4个按键 短按开关台灯 加减键调光 长按进入菜单 1.台灯 加入PCA PWM 调光 STC12C5A60S2的PCA PWM非常好用 设置简单无极…

kubernetes负载均衡---MetalLB

https://github.com/metallb/metallb 参考 : https://mp.weixin.qq.com/s/MBOWfcTjFMmgJFWw-FIk0Q 自建的Kubernetes集群,默认情况下是不支持负载均衡的。当需要提供服务的外部访问时,可使用 Ingress、NodePort等方式。他们都存在一些问题 …

如何把几个pdf文件合成在一个pdf文件

PDF合并,作为一种常见的文件处理方式,无论是在学术研究、工作汇报还是日常生活中,都有着广泛的应用。本文将详细介绍PDF合并的多种方法,帮助读者轻松掌握这一技能。 打开 “轻云处理pdf官网” 的网站,然后上传pdf。 pd…

基于线性回归根据饮食习惯和身体状况估计肥胖水平

目录 1. 作者介绍2.饮食习惯与身体状况数据集介绍3.实验步骤3.1 数据分析3.2 可视化处理数据3.3 导入线性回归模型进行训练3.4 预测结果3.5 完整代码3.5.1 数据分析3.5.2 模型评估 参考文献 1. 作者介绍 刘欢,女,西安工程大学电子…

10 -每台机器的进程平均运行时间(高频 SQL 50 题基础版)

10 - 每台机器的进程平均运行时间 -- sum(if(activity_type end,timestamp ,-timestamp )) -- 如果activity_type为“end”,值为timestamp,为“start” 为-timestamp,所有数相加end-start -- count(distinct process_id),获取同一机器有几个进行id -- r…

k8s Pods漂移时间配置

默认为300秒 apiVersion: apps/v1 kind: Deployment metadata:name: my-test spec:replicas: 1selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-containerimage: nginx:latestports:- containerPort: 80tolerations:- key: &…

C++语言学习(七)—— 继承、派生与多态(一)

目录 一、派生类的概念 1.1 定义派生类的语法格式 1.1.1 定义单继承派生类 1.1.2 定义多继承派生类 1.2 继承方式 二、公有继承 三、派生类的构造和析构 四、保护成员的引入 五、改造基类的成员函数 六、派生类与基类同名成员的访问方式 七、私有继承和保护继承 7.…

bug记录——报了一堆xtr1common和yvals_core.h的错误

现象 今天使用VisualStdio2022时&#xff0c;突然出现了这样严重的报错&#xff0c;看得我一头雾水&#xff0c;而且无法启动VisualStdio2022的调试。 原因 发现NULL没法直接使用时&#xff0c;跟着提示添加了如下的头文件。 #include<cstddef>&#xff0c;是C标准库的头…

Blog项目切换Markdown编辑器———LayUI弹出层弹出写在页面的内容导致的各种bug

【2024.5.24回顾】 1 问题描述(描述完自己解决了…) 正常情况 点击添加文章按钮后&#xff0c;弹出文章编辑界面&#xff0c;如果用富文本功能编辑&#xff0c;则一切正常。可以多次打开、关闭 Markdown 如果在弹出层中点击了切换编辑器按钮&#xff0c;会成功切换为markd…

JDBC学习笔记(三)高级篇

一、JDBC 优化及工具类封装 1.1 现有问题 1.2 JDBC 工具类封装 V1.0 resources/db.properties配置文件&#xff1a; 工具类代码&#xff1a; 1.3 ThreadLocal 1.4 JDBC 工具类封装 V2.0 二、DAO封装及BaseDAO 工具类 2.1 DAO 概念 2.2 BaseDAO 概念 2.3 BaseDAO 搭建 2.4 Ba…

WPF前端:一个纯Xaml的水平导航栏

效果图&#xff1a; 代码&#xff1a; 1、样式代码&#xff0c;可以写在窗体资源处或者样式资源文件中 <Style x:Key"MenuRadioButtonStyle" TargetType"{x:Type RadioButton}"><Setter Property"FontSize" Value"16" />…

开源规则引擎LiteFlow项目应用实践

本文介绍基于开源规则引擎LiteFlow&#xff0c;如何开发规则设计器&#xff0c;在低代码平台中集成规则引擎&#xff0c;并在项目中实现应用的效果。由于低代码平台使用规则引擎实现了逻辑编排的需求&#xff0c;所以本文中的叫法为“逻辑设计”、“逻辑编排”、“逻辑流引擎”…

.NET IoC 容器(三)Autofac

目录 .NET IoC 容器&#xff08;三&#xff09;AutofacAutofacNuget 安装实现DI定义接口定义实现类依赖注入 注入方式构造函数注入 | 属性注入 | 方法注入注入实现 接口注册重复注册指定参数注册 生命周期默认生命周期单例生命周期每个周期范围一个生命周期 依赖配置Nuget配置文…

0基础学习区块链技术——推演猜想

在《0基础学习区块链技术——入门》一文中&#xff0c;我们结合可视化工具&#xff0c;直观地感受了下区块的结构&#xff0c;以及链式的前后关系。 本文我们将抛弃之前的知识&#xff0c;从0开始思考和推演&#xff0c;区块链技术可能是如何构思出来的。 去中心 在一般的思维…

浅谈配置元件之随机变量

浅谈配置元件之随机变量 1.概述 为了增强测试的真实性和多样性&#xff0c;JMeter 提供了多种配置元件来生成动态数据&#xff0c;其中“随机变量”(Random Variable) 就是一种常用的配置元件&#xff0c;用于生成随机数值、字符串等&#xff0c;以模拟不同用户请求中的变化参…

认识meta

目录 认识meta camera_metadata的存储结构 camera_metadata的基本操作 申请camera_metadata 增加entry 查找entry 更新entry 删除entry 对tag的查找操作 vendor_tag_ops和vendor_cache_ops是Andriod提供的接口 propertyID Camxhal3metadatautil.cpp文件理解 Initia…

Redisson 分布式锁 - RLock、RReadWriteLock、RSemaphore、RCountDownLatch(配置、使用、原理)

目录 前言 Redisson 分布式锁 环境配置 1&#xff09;版本说明 2&#xff09;依赖如下 3&#xff09;配置文件如下 4&#xff09;项目配置 RLock 1&#xff09;使用方式 2&#xff09;加锁解释 3&#xff09;加锁时手动设置时间 4&#xff09;加锁时&#xff0c;到…

揭秘FL Studio21.2.8中文版一键解锁音乐创作新境界!

在音乐制作的广阔天地里&#xff0c;随着技术的不断进步和数字音频工作站&#xff08;DAW&#xff09;软件的普及&#xff0c;越来越多的音乐爱好者和专业制作人开始涉足音乐创作的奇妙旅程。其中&#xff0c;FL Studio以其强大的功能、直观的操作界面和丰富的音色资源&#xf…

LED驱动IC:HC2106,1W升压型DC/DC白光LED驱动器HC2106系列,供应给大功率白光LED灯提供能源、恒流源

LED驱动IC&#xff1a; HC2106&#xff1a;1W升压型DC/DC白光LED驱动器HC2106系列 概述&#xff1a;HC2106系列芯片是针对LED应用设计的PFM 控制模式的开关型DC/DC 升压恒流芯片&#xff0c;通过外接电阻可使输出电流值恒定在0mA&#xff5e;500mA。 HC2106可以给一个、多个…

算法004:盛水最多的容器

这道题比较简单&#xff0c;使用双指针。 要求的是最大面积&#xff0c;对于一个水桶&#xff08;水杯来说&#xff09;&#xff0c;面积的算法是固定的&#xff0c;就是底乘以高。 在这个题中&#xff0c;我们把左边的位置设为left&#xff0c;右边的位置设为right&#xff…