如何将Excel带格式列复制到Word?已尝试pandas+python-docx未保留格式
解决Excel转Word表格保留格式的问题
你的问题核心在于pandas仅读取Excel的纯数据,不包含任何格式信息,而且python-docx的cell.text方法只能设置纯文本内容,自然无法保留原格式。下面提供两种可行的解决办法:
方法一:用win32com模拟手动复制粘贴(最省心,完美保留格式)
这个方法直接调用Office的COM接口,就像你手动打开Excel复制单元格、粘贴到Word里一样,能完整保留所有格式(字体、颜色、对齐、边框、单元格背景等)。
先安装依赖:
pip install pywin32
示例代码:
import win32com.client as win32 # 启动Excel和Word应用 excel = win32.gencache.EnsureDispatch('Excel.Application') word = win32.gencache.EnsureDispatch('Word.Application') # 打开目标文件(替换成你的文件路径) wb = excel.Workbooks.Open(r'C:\你的路径\file_excel.xlsx') ws = wb.Worksheets('Sheet1') # 替换成你的工作表名称 doc = word.Documents.Open(r'C:\你的路径\file_word.docx') # 复制Excel中的目标区域(这里以A1:B2为例,按需修改) ws.Range('A1:B2').Copy() # 粘贴到Word的第一个表格的起始位置(Word索引从1开始) doc.Tables(1).Cell(1, 1).Range.Paste() # 保存并关闭文件,退出应用 doc.Save() doc.Close() wb.Close() excel.Quit() word.Quit()
方法二:用openpyxl读取格式,再用python-docx手动设置(适合轻量格式场景)
如果不想依赖Office客户端,可以用openpyxl读取Excel单元格的格式,再逐个映射到Word单元格中。这种方法需要自己处理格式映射,适合格式不复杂的场景。
先安装依赖:
pip install openpyxl python-docx
示例代码(以字体、对齐方式为例):
from openpyxl import load_workbook from docx import Document from docx.shared import Pt from docx.enum.text import WD_PARAGRAPH_ALIGNMENT # 读取Excel和Word文件 wb = load_workbook('file_excel.xlsx') ws = wb.active doc = Document('file_word.docx') table = doc.tables[0] # 遍历单元格,复制内容和基础格式 for row_idx in range(2): # 对应原代码中的A1:B2区域 for col_idx in range(2): # 获取Excel单元格(openpyxl索引从1开始) excel_cell = ws.cell(row=row_idx+1, column=col_idx+1) # 获取Word单元格 word_cell = table.cell(row_idx, col_idx) # 设置文本内容 word_cell.text = str(excel_cell.value) if excel_cell.value else "" # 映射字体格式 word_font = word_cell.paragraphs[0].runs[0].font excel_font = excel_cell.font word_font.name = excel_font.name word_font.size = Pt(excel_font.size) if excel_font.size else None word_font.bold = excel_font.bold word_font.italic = excel_font.italic if excel_font.color and excel_font.color.rgb: word_font.color.rgb = excel_font.color.rgb # 映射对齐方式 align_map = { 'center': WD_PARAGRAPH_ALIGNMENT.CENTER, 'left': WD_PARAGRAPH_ALIGNMENT.LEFT, 'right': WD_PARAGRAPH_ALIGNMENT.RIGHT, } excel_align = excel_cell.alignment.horizontal if excel_cell.alignment else 'left' word_cell.paragraphs[0].alignment = align_map.get(excel_align, WD_PARAGRAPH_ALIGNMENT.LEFT) # 保存修改后的Word文件 doc.save('file_word.docx')
注意:第二种方法仅覆盖了基础格式,像单元格背景色、边框等复杂格式还需要额外编写代码处理。如果需要完整保留所有格式,优先选择第一种方法。
内容的提问来源于stack exchange,提问作者Jackp
相关产品推荐
相关产品推荐

