使用Python实现将Excel表格插入到Word文档中
目录
- 提取Excel工作表数据插入Word文档
- 复制Excel工作表数据及格式插入Word文档
- 将Excel工作表作为OLE对象嵌入Word文档
在日常办公场景中,通过python脚本自动化整合Excel数据与Word文档,能够实现表格的智能迁移,满足不同场景下数据呈现的专业性要求。直接提取表格内容插入Word适用于需要快速传递核心数据的场景,确保信息精准直达;完整复制表格样式及格式则能保留原数据可视化效果,匹配正式报告对排版美观的严苛标准;而将表格作为OLE对象嵌入则兼顾了文档的动态更新能力,当源数据发生变更时,用户可通过双击对象直接调取Excel进行编辑,这种交互式设计特别适用于需要长期维护的协作文件。
本文将介绍如何使用Python通过以上三种方式将Excel表格插入到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文档的插入。
以下是操作步骤:1.加载 Excel 文件
- 创建 Workbook 实例并使用 LoadFromFile() 读取 Excel 文件。
- 通过 Worksheets.get_Item(0) 获取第一个工作表。
- 使用 AllocatedRange 获取已使用的单元格范围。
2.创建 Word 文档并添加表格
- 创建 Document 实例,并使用 AddSection() 添加节。
- 使用 AddTable() 添加表格。
3.复制 Excel 的表头到 Word
- 使用 AddRow() 添加表头行。
- 通过 AddCell().AddParagraph().AppendText() 填充表头文本。
4.复制 Excel 的数据行到 Word
- 遍历 Excel 的数据行,使用 AddRow() 添加数据行。
- 通过 Cells.get_Item(col).AddParagraph().AppendText() 填充单元格内容。
- 如果单元格包含公式,则使用 FormulaValue,否则使用 Value。
5.调整表格样式并保存 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.R编程客栈owCount): 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.Value paragraph.AppendText(text) # 自动调整表格并应用样式 table.AutoFit(AutoFitBehaviorType.AutoFitToWindow) table.ApplyStyle(DefaultTableStyle.GridTable1LightAccent6) # 保存 Word 文档 doc.SaveToFile(word_file, FileFormat.Docx2019)
结果
复制Excel工作表数据及格式插入Word文档
我们也可以使用库中提供的类、属性和方法来复制Excel数据到Word文档的同时,将单元格格式及文本格式一起复制到Word文档中,从而实现高还原度地插入Excel表格到Word文档。我们需要使用库中提供的组件来新建方法实现上述操作。以下是操作步骤:
1.加载 Excel 文件
- 创建 Workbook 实例,并使用 LoadFromFile() 读取 Exce编程客栈l 文件。
- 获取第一个工作表 sheet。
2.创建 Word 文档并设置页面方向
- 创建 Document 实例,使用 AddSection() 添加节。
- 设置页面方向为横向:section.PageSetup.Orientation = PageOrientation.Landscape。
3.创建 Word 表格
- 使用 AddTable(True) 创建表格。
- 通过 ResetCells(sheet.LastRow, sheet.LastColumn) 设置表格的行数和列数。
4.执行合并单元格操作
使用 merge_cells(sheet, table) 方法,遍历 Excel 中的合并单元格,并在 Word 中执行相应的合并操作。
5.复制 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 单元格。
6.保存 Word 文档
使用 SaveToFile("output/CopyExcelDataStyleToWord.docx", FileFormat.Docx2019) 保存 Word 文件。
7.释放资源
调用 doc.Dispose(编程客栈) 和 workbook.Dispose() 释放资源。
代码示例
from spire.xls import * from spire.doc import * def merge_cells(sheet, table): """根据 Excel 中的合并单元格信息,在 Word 表格中执行相应的合并操作。""" if not sheet.HasMergedCells: return for cell_range in sheet.MergedCells: start_row, start_col = cell_range.Row, cell_range.Column row_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.Font text_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.FontName text_range.CharacterFormat.Bold = font.IsBold text_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, android 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文档中编辑或更新后,表格展示会自动更新为最新的数据。
以下是操作步骤:
1.定义文件路径
- 定义 Excel 文件路径 excel_path 和输出 Word 文件路径 output_doc_path。
- 定义图像文件路径 image_path。
2.创建 Word 文档并设置页面方向
- 创建 Document 实例,使用 AddSection() 添加节。
- 设置页面方向为横向:section.PageSetup.Orientation = PageOrientation.Landscape。
- 使用 AddParagraph() 添加段落。
3.载入 Excel 文件并获取工作表
- 创建 Workbook 实例,并使用 LoadFromFile() 读取 Excel 文件。
- 获取第一个工作表 sheet。
4.将 Excel 表格转换为图像并保存
使用 sheet.ToImage() 方法将工作表转换为图像,并保存为 image_path。
5.创建并加载工作表图像
创建 DocPicture 实例,并使用 LoadImage() 加载工作表图像。
6.将 OLE 对象(Excel 工作表)插入到 Word 文档
- 使用 paragraph.AppendOleObject() 插入 Excel 工作表作为 OLE 对象,并将类型设置为 OleObjectType.ExcelWorksheet。
- 设置 OLE 对象不显示为图标:ole.DisplayAsIcon = False。
7.保存 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.Landscape paragraph = 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文档中的详细内容,更多关于Python Excel插入Word的资料请关注编程客栈(www.devze.com)其它相关文章!
精彩评论