用Python插入Excel表格到Word文档
在日常办公场景中,通过Python脚本自动化整合Excel数据与Word文档,能够实现表格的智能迁移,满足不同场景下数据呈现的专业性要求。直接提取表格内容插入Word适用于需要快速传递核心数据的场景,确保信息精准直达;完整复制表格样式及格式则能保留原数据可视化效果,匹配正式报告对排版美观的严苛标准;而将表格作为OLE对象嵌入则兼顾了文档的动态更新能力,当源数据发生变更时,用户可通过双击对象直接调取Excel进行编辑,这种交互式设计特别适用于需要长期维护的协作文件。
本文将介绍如何使用Python通过以上三种方式将Excel表格插入到Word文档中。
文章目录
- 提取Excel工作表数据插入Word文档
- 复制Excel工作表数据及格式插入Word文档
- 将Excel工作表作为OLE对象嵌入Word文档
本文所使用的Word文档操作方法需要用到Free Spire.Doc for Python(PyPI:pip install spire.doc.free),读取Excel工作表数据需要用到Free Spire.XLS for Python(PyPI:pip install spire.xls.free)。
提取Excel工作表数据插入Word文档
我们可以通过直接读取Excel工作表数据,然后在Word文档中创建表格并插入读取的数据,来实现Excel表格到Word文档的插入。
以下是操作步骤:
-
加载 Excel 文件
- 创建
Workbook实例并使用LoadFromFile()读取 Excel 文件。 - 通过
Worksheets.get_Item(0)获取第一个工作表。 - 使用
AllocatedRange获取已使用的单元格范围。
- 创建
-
创建 Word 文档并添加表格
- 创建
Document实例,并使用AddSection()添加节。 - 使用
AddTable()添加表格。
- 创建
-
复制 Excel 的表头到 Word
- 使用
AddRow()添加表头行。 - 通过
AddCell().AddParagraph().AppendText()填充表头文本。
- 使用
-
复制 Excel 的数据行到 Word
- 遍历 Excel 的数据行,使用
AddRow()添加数据行。 - 通过
Cells.get_Item(col).AddParagraph().AppendText()填充单元格内容。 - 如果单元格包含公式,则使用
FormulaValue,否则使用Value。
- 遍历 Excel 的数据行,使用
-
调整表格样式并保存 Word 文档
- 使用
AutoFit(AutoFitBehaviorType.AutoFitToWindow)让表格适应窗口。 - 使用
ApplyStyle(DefaultTableStyle.GridTable1LightAccent6)设置表格样式。 - 使用
SaveToFile(path, FileFormat.Docx2019)保存 Word 文档。
- 使用
代码示例:
from spire.doc import Document, AutoFitBehaviorType, FileFormat, DefaultTableStyle
from spire.xls import Workbook# 指定Excel文件路径与输出Word文档路径
excel_file = "Sample.xlsx"
word_file = "output/ExcelDataToWord.docx"# 读取 Excel
with Workbook() as workbook:workbook.LoadFromFile(excel_file)worksheet = workbook.Worksheets.get_Item(0)allocated_range = worksheet.AllocatedRange# 创建 Word 文档with Document() as doc:section = doc.AddSection()table = section.AddTable()# 添加表头行header_row = table.AddRow()for col in range(allocated_range.ColumnCount):cell = header_row.AddCell()paragraph = cell.AddParagraph()paragraph.AppendText(allocated_range.get_Item(1, col + 1).Text)# 添加数据行for row in range(1, allocated_range.RowCount):data_row = table.AddRow()for col in range(allocated_range.ColumnCount):cell = data_row.Cells.get_Item(col)paragraph = cell.AddParagraph()cell_value = allocated_range.get_Item(row + 1, col + 1)text = cell_value.FormulaValue if cell_value.HasFormula else cell_value.Valueparagraph.AppendText(text)# 自动调整表格并应用样式table.AutoFit(AutoFitBehaviorType.AutoFitToWindow)table.ApplyStyle(DefaultTableStyle.GridTable1LightAccent6)# 保存 Word 文档doc.SaveToFile(word_file, FileFormat.Docx2019)
结果

复制Excel工作表数据及格式插入Word文档
我们也可以使用库中提供的类、属性和方法来复制Excel数据到Word文档的同时,将单元格格式及文本格式一起复制到Word文档中,从而实现高还原度地插入Excel表格到Word文档。我们需要使用库中提供的组件来新建方法实现上述操作。以下是操作步骤:
-
加载 Excel 文件
- 创建
Workbook实例,并使用LoadFromFile()读取 Excel 文件。 - 获取第一个工作表
sheet。
- 创建
-
创建 Word 文档并设置页面方向
- 创建
Document实例,使用AddSection()添加节。 - 设置页面方向为横向:
section.PageSetup.Orientation = PageOrientation.Landscape。
- 创建
-
创建 Word 表格
- 使用
AddTable(True)创建表格。 - 通过
ResetCells(sheet.LastRow, sheet.LastColumn)设置表格的行数和列数。
- 使用
-
执行合并单元格操作
- 使用
merge_cells(sheet, table)方法,遍历 Excel 中的合并单元格,并在 Word 中执行相应的合并操作。
- 使用
-
复制 Excel 数据和样式到 Word 表格
- 遍历 Excel 表格的每一行和每一列,设置每行的高度:
table.Rows[r - 1].Height = float(sheet.Rows[r - 1].RowHeight)。 - 获取每个单元格的数据和样式,使用
AddParagraph().AppendText()方法将数据复制到 Word 表格中。 - 调用
copy_style(text_range, x_cell, w_cell)方法,复制 Excel 单元格的样式到 Word 单元格。
- 遍历 Excel 表格的每一行和每一列,设置每行的高度:
-
保存 Word 文档
- 使用
SaveToFile("output/CopyExcelDataStyleToWord.docx", FileFormat.Docx2019)保存 Word 文件。
- 使用
-
释放资源
- 调用
doc.Dispose()和workbook.Dispose()释放资源。
- 调用
代码示例
from spire.xls import *
from spire.doc import *def merge_cells(sheet, table):"""根据 Excel 中的合并单元格信息,在 Word 表格中执行相应的合并操作。"""if not sheet.HasMergedCells:returnfor cell_range in sheet.MergedCells:start_row, start_col = cell_range.Row, cell_range.Columnrow_count, col_count = cell_range.RowCount, cell_range.ColumnCount# 处理水平合并if col_count > 1:for row in range(start_row, start_row + row_count):table.ApplyHorizontalMerge(row - 1, start_col - 1, start_col - 1 + col_count - 1)# 处理垂直合并if row_count > 1:table.ApplyVerticalMerge(start_col - 1, start_row - 1, start_row - 1 + row_count - 1)def copy_style(text_range, excel_cell, word_cell):"""将 Excel 单元格的样式复制到 Word 单元格。"""font = excel_cell.Style.Fonttext_range.CharacterFormat.TextColor = Color.FromRgb(font.Color.R, font.Color.G, font.Color.B)text_range.CharacterFormat.FontSize = float(font.Size)text_range.CharacterFormat.FontName = font.FontNametext_range.CharacterFormat.Bold = font.IsBoldtext_range.CharacterFormat.Italic = font.IsItalic# 设置单元格背景色if excel_cell.Style.FillPattern != ExcelPatternType.none:word_cell.CellFormat.BackColor = Color.FromRgb(excel_cell.Style.Color.R, excel_cell.Style.Color.G,excel_cell.Style.Color.B)# 设置水平对齐方式align_map = {HorizontalAlignType.Left: HorizontalAlignment.Left,HorizontalAlignType.Center: HorizontalAlignment.Center,HorizontalAlignType.Right: HorizontalAlignment.Right}if excel_cell.HorizontalAlignment in align_map:text_range.OwnerParagraph.Format.HorizontalAlignment = align_map[excel_cell.HorizontalAlignment]# 设置垂直对齐方式valign_map = {VerticalAlignType.Top: VerticalAlignment.Top,VerticalAlignType.Center: VerticalAlignment.Middle,VerticalAlignType.Bottom: VerticalAlignment.Bottom}if excel_cell.VerticalAlignment in valign_map:word_cell.CellFormat.VerticalAlignment = valign_map[excel_cell.VerticalAlignment]# 加载 Excel 文件
workbook = Workbook()
workbook.LoadFromFile("Sample.xlsx")# 获取第一个工作表
sheet = workbook.Worksheets[0]# 创建 Word 文档
doc = Document()
section = doc.AddSection()
section.PageSetup.Orientation = PageOrientation.Landscape# 创建 Word 表格
table = section.AddTable(True)
table.ResetCells(sheet.LastRow, sheet.LastColumn)# 执行合并单元格
merge_cells(sheet, table)# 复制 Excel 数据和样式到 Word 表格
for r in range(1, sheet.LastRow + 1):table.Rows[r - 1].Height = float(sheet.Rows[r - 1].RowHeight)for c in range(1, sheet.LastColumn + 1):x_cell = sheet.Range[r, c]w_cell = table.Rows[r - 1].Cells[c - 1]# 添加文本并复制样式text_range = w_cell.AddParagraph().AppendText(x_cell.NumberText)copy_style(text_range, x_cell, w_cell)# 保存 Word 文档
doc.SaveToFile("output/CopyExcelDataStyleToWord.docx", FileFormat.Docx2019)
doc.Dispose()
workbook.Dispose()
结果

将Excel工作表作为OLE对象嵌入Word文档
我们还可以直接以OLE对象形式将Excel工作表嵌入到Word文档中,从而实现在Word文档中展示表格的同时,使表格拥有Excel的高级功能。在使用代码嵌入Excel工作表到Word文档时,需要先将Excel工作表保存为图像应用于Word文档中OLE对象的展示。当表格在Word文档中编辑或更新后,表格展示会自动更新为最新的数据。
以下是操作步骤:
-
定义文件路径
- 定义 Excel 文件路径
excel_path和输出 Word 文件路径output_doc_path。 - 定义图像文件路径
image_path。
- 定义 Excel 文件路径
-
创建 Word 文档并设置页面方向
- 创建
Document实例,使用AddSection()添加节。 - 设置页面方向为横向:
section.PageSetup.Orientation = PageOrientation.Landscape。 - 使用
AddParagraph()添加段落。
- 创建
-
载入 Excel 文件并获取工作表
- 创建
Workbook实例,并使用LoadFromFile()读取 Excel 文件。 - 获取第一个工作表
sheet。
- 创建
-
将 Excel 表格转换为图像并保存
- 使用
sheet.ToImage()方法将工作表转换为图像,并保存为image_path。
- 使用
-
创建并加载工作表图像
- 创建
DocPicture实例,并使用LoadImage()加载工作表图像。
- 创建
-
将 OLE 对象(Excel 工作表)插入到 Word 文档
- 使用
paragraph.AppendOleObject()插入 Excel 工作表作为 OLE 对象,并将类型设置为OleObjectType.ExcelWorksheet。 - 设置 OLE 对象不显示为图标:
ole.DisplayAsIcon = False。
- 使用
-
保存 Word 文档
- 使用
SaveToFile(output_doc_path, FileFormat.Docx2019)保存 Word 文件。
- 使用
代码示例
import os
from spire.doc import Document, DocPicture, FileFormat, OleObjectType, PageOrientation
from spire.xls import Workbook# 定义文件路径
excel_path = "Sample.xlsx"
output_doc_path = os.path.join("output", "InsertExcelOleToWord.docx")
image_path = "SheetImage.png"# 创建Word文档并配置页面方向
with Document() as doc:section = doc.AddSection()section.PageSetup.Orientation = PageOrientation.Landscapeparagraph = section.AddParagraph()# 载入Excel文件并获取第一个工作表with Workbook() as workbook:workbook.LoadFromFile(excel_path)sheet = workbook.Worksheets.get_Item(0)# 将Excel表格转换为图像并保存image_stream = sheet.ToImage(0, 0, sheet.AllocatedRange.RowCount, sheet.AllocatedRange.ColumnCount)image_stream.Save(image_path)# 创建DocPicture对象,并加载工作表图像pic = DocPicture(doc)pic.LoadImage(image_path)# 将OLE对象(Excel工作表)插入到Word文档ole = paragraph.AppendOleObject(excel_path, pic, OleObjectType.ExcelWorksheet)# 设置不显示OLE对象为图标ole.DisplayAsIcon = False# 保存Word文档doc.SaveToFile(output_doc_path, FileFormat.Docx2019)
结果

本文演示如何使用Python将Excel表格插入到Word文中,包括插入数据、复制数据和样式以及以OLE对象形式插入三种形式。
相关文章:
用Python插入Excel表格到Word文档
在日常办公场景中,通过Python脚本自动化整合Excel数据与Word文档,能够实现表格的智能迁移,满足不同场景下数据呈现的专业性要求。直接提取表格内容插入Word适用于需要快速传递核心数据的场景,确保信息精准直达;完整复制…...
合合信息TextIn大模型加速器 2.0来了:智能文档解析和图表解析能力全面升级
合合信息“TextIn大模型加速器 2.0”版本来了:文档解析和图表解析能力全面升级 背景 在日常工作中,我们常常遇到无法直接复制的文档内容或图片内容,这些内容通常需要进行识别和解析。一个典型的例子是,当我们需要将折线图转化为…...
笔记:代码随想录算法训练营day62:108.冗余连接、109.冗余连接II
学习资料:代码随想录 108. 冗余连接 卡码网题目链接(ACM模式) 判断是否有环的依据为,利用并查集,isSame函数,判断当下这条边的两个节点入集前是否为同根,如果是的话,该边就是会构…...
刚刚整理实测可用的股票数据API接口集合推荐:同花顺、雅虎API、智兔数服、聚合数据等Python量化分析各项数据全面丰富
在金融科技高速发展的今天,股票API接口已成为开发者、量化交易者和金融从业者的核心工具之一。它通过标准化的数据接口,帮助用户快速获取实时或历史市场数据,为投资决策、策略回测和金融应用开发提供支持。本文将深入解析股票API的核心功能、…...
消息队列Message Queue
前面,我们在黑点点评中秒杀场景中,首次了解到消息队列MQ,它主要解决了秒杀场景中异步场景,提升了并发性,吞吐量。可是还是对消息队列又很多的疑惑? 消息队列是什么 消息队列是一种通信协议或中间件&#…...
Day 25:股票的最大利润 + 1到n求和
数组 prices 记录了某芯片近期的交易价格,其中 prices[i] 表示的 i 天该芯片的价格。你只能选择 某一天 买入芯片,并选择在 未来的某一个不同的日子 卖出该芯片。请设计一个算法计算并返回你从这笔交易中能获取的最大利润。 如果你不能获取任何利润&…...
如何利用AI智能生成PPT提升工作效率
如何利用AI智能生成PPT提升工作效率?PPT制作曾经是每个人办公生活中的一大痛点。你有多久没有在制作PPT时感到焦头烂额,选模板、调整格式、插入图片,每一项都得花费大量的时间和精力,最后还未必能做出一份令人满意的效果。随着人工…...
WIN11 企业版 部署Dify+Docker
Dify(Do it for you)是一款开源的大语言模型应用开发平台,旨在简化AI应用的创建、部署和管理过程,使开发者能够更快速、更轻松地构建和运营基于GPT等模型的AI应用。 Dify平台创建和运营一个AI chatbot应用,涉及到登录…...
理解CMakeLists.txt文件
CMakeLists.txt(主入口) │ ├── 项目元信息(project, cmake_minimum_required) ├── 编译选项设置(option) ├── 编译标志设置(set(CMAKE_...)) ├── 查找依赖库(find_package, include_directories) ├── 注册插件、扩展(register_extension, add_subdi…...
1.25-20GHz/500ns超快跳频!盛铂SWFA300国产捷变频频率综合器模块赋能雷达/5G/电子战高频精密控制 本振/频综模块
盛铂SWFA300捷变频频率综合器模块简述: 盛铂科技国产SWFA300捷变频频率综合器是一款在频率范围内任意两点频率的跳频时间在500nS以内的高速跳频源,其输出频率范围为1.25GHz至20GHz,频率的最小步进为10kHz。同时它拥有优秀的相位噪声特性&…...
MySql修改全部表和字段编码
修改全部表 SELECT CONCAT(ALTER TABLE , TABLE_NAME, CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;) AS sql_statements FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA 数据库名称 返回的下面这种SQL,然后批量执行即可 ALTER TABLE gen_table CO…...
elementUI el-image图片加载失败解决
是不是,在网上找了一些,都不行,这里一行代码,解决,后端返回图片路径,el-image图片加载失败的问题 解决办法, vue项目里,index.html文件里加一行代码就可 <meta name"refe…...
代理IP协议详解HTTP、HTTPS、SOCKS5分别适用于哪些场景
“代理IP协议在现代网络通信中扮演着至关重要的角色。它们通过提供中间层服务,帮助用户匿名访问网络、绕过地理限制、提高安全性和加速数据传输。HTTP、HTTPS和SOCKS5是三种最常见的代理IP协议,每种协议都有其特定的用途和适用场景。” HTTP代理及其适用…...
UniApp开发多端应用——流式语音交互场景优化
一、问题背景:UniApp默认方案的局限性 在流式语音交互场景(如AI语音助手、实时字幕生成)中,UniApp默认的uni.getRecorderManager 和uni.createInnerAudioContext 存在以下瓶颈: 录音端: 延迟高࿱…...
AIGC工具平台-通用抠图换背景
本模块采用先进的大模型智能算法,精准识别并分割图像中的人物或物品主体,实现高效、精准、智能化的抠图处理。无论是人物肖像、产品展示,还是复杂场景,该工具均能准确提取主体,并自动适配至背景图像,实现自…...
word快速创建虚拟文字
创建虚拟文字的作用:如培训新员工使用 Word,用虚拟文字演示如何设置段落格式。不需要你随便乱敲文字或者去复制一段文字过来。帮你节约了时间! 两个函数的使用必须在段落的开头!!! rand函数 在 Word 中…...
win10下python脚本运行缺失ccache的问题处理
问题 python脚本运行时,会提醒参考 https://github.com/ccache/ccache/blob/master/doc/INSTALL.md 处理缺失ccache的问题。 下载编译 下载ccache主干版本, 例如 https://github.com/ccache/ccache/archive/refs/heads/master.zip 按照说明编译 mkd…...
大模型在支气管扩张预测及治疗方案制定中的应用研究
目录 一、引言 1.1 研究背景与意义 1.2 研究目的与方法 1.3 国内外研究现状 二、大模型技术概述 2.1 大模型的基本原理与架构 2.2 适用于支气管扩张预测的大模型类型及特点 2.3 大模型在医疗领域的应用现状与优势 三、支气管扩张的相关医学知识 3.1 支气管扩张的病因…...
开发复合组件TLabel + TwwDBLookupCombo
老鸟跳过。。。。。。。。本文只是为小白准备的 -------------- TwwDBLookupCombo 组件是老牌控件包的 Inofpower 中的一个组件。Inofpower 很久也没有更新了,只是作了新版DELPHI的适配,组件的功能从D2007那些开始到现在,可以说几乎没有任何…...
ch05 课堂参考代码及部分题目思路
ch05 字典树 字典树(Trie)是一种用于实现字符串快速查找的多叉树结构,查找原理类似于我们在英文词典上查找单词。 字典树用边来代表字母,从根结点到树上某一结点的路径就代表了一个字符串。 字典树的表示 以字符集为小写字母的…...
0328-内存图2
是否正确待定: Perso类 package com.qc.内存图2;public class Perso {public int age;public String name;public static int flag;public void m1() {}public static void m2() {}Overridepublic String toString() {return "Perso [age" age "…...
【ESP32S3】esp32获取串口数据并通过http上传到前端
通过前面的学习(前面没发过,因为其实就是跑它的demo)了解到串口配置以及开启线程实现功能的工作流程,与此同时还有esp32作为STA节点,将数据通过http发送到服务器。 将这两者联合 其实是可以得到一个:esp32获…...
代购系统:架构设计、功能实现与用户界面优化
一、引言 随着全球化的加速,代购业务已成为电商领域的重要组成部分。代购系统不仅需要满足用户对商品的需求,还需提供高效、安全、便捷的购物体验。本文将从技术架构设计、功能实现、用户界面优化三个方面深入探讨代购系统的设计与实现。 二、技术架构…...
《一本书讲透Elasticsearch:原理、进阶与工程实践》读书笔记
1:es的组成部分: Elasticsearch 引擎:核心组件,处理索引和搜索请求 Kibana:es的可视化的数据界面,用于分析和展示数据 Beats(可选)轻量级的日志采集器 2:基本概念 es开…...
Android15查看函数调用关系
Android15 Camera3中打印函数调用栈 1.使用CallStack跟踪函数调用 修改涉及三个内容: Android.bp中添加对CallStack的引用。CallStack被打包在libutilscallstack.so。代码中包含CallStack的头文件。代码中调用CallStack接口,打印函数调用栈。 例子&am…...
Spring Boot(十七):集成和使用Redis
Redis(Remote Dictionary Server,远程字典服务器)是一个开源的、基于内存的数据结构存储系统,它可以用作数据库、缓存和消息中间件。Spring Boot 中集成和使用Redis主要涉及以下几个步骤: 添加依赖 在项目的pom.xml文件中添加Redis的依赖。Spring Boot提供了对Redis的集…...
macOS 15 通过 MacPorts 安装 PHP 7 构建错误找不到符号在 dns.o 中解决方法
构建遇到的问题如下: "_res_9_dn_expand", referenced from:_php_parserr in dns.o_php_parserr in dns.o_php_parserr in dns.o_php_parserr in dns.o_php_parserr in dns.o_php_parserr in dns.o_zif_dns_get_mx in dns.o..."_res_9_dn_skipname&…...
练习:猜数字小游戏
需求: 程序自动生成一个 1 - 100 之间的随机数字,使用程序实现猜出这个数字是多少? 代码: //猜数字小游戏 package demo01; import java.util.Random; import java.util.Scanner; public class HelloJava {public static void …...
EMQX Dashboard
EMQX Dashboard EMQX理论基础 https://blog.csdn.net/liudachu/article/details/146495030 1 Dashboard简介 EMQX 提供了一个内置的管理控制台,即 EMQX Dashboard。方便用户通过 Web 页面就能轻松管理和监控 EMQX 集群,并配置和使用所需的各项功能。 访…...
PC名词解释-笔记本的S0,S1,S2,S3,S4,S5状态
🎓作者简介:程序员转项目管理领域优质创作者 💌个人邮箱:[2707492172qq.com] 🌐PMP资料导航:PM菜鸟(查阅PMP大纲考点) 💡座右铭:上善若水,水善利…...
