非常游戏网
如何在 Excel 文件间准确复制富文本(含多种颜色、格式)内容

如何在 Excel 文件间准确复制富文本(含多种颜色、格式)内容

2026-05-24日常编程66836

本文介绍使用 openpyxl 库在两个 Excel 工作簿间完整复制富文本单元格(如红黑混排文字)的正确方法,关键在于启用 rich_text=True 参数并直接赋值 .value,而非手动提取字体/填充属性。

本文介绍使用 openpyxl 库在两个 excel 工作簿间完整复制富文本单元格(如红黑混排文字)的正确方法,关键在于启用 `rich_text=true` 参数并直接赋值 `.value`,而非手动提取字体/填充属性。

在 Excel 中处理富文本(Rich Text)——即同一单元格内包含多种字体颜色、大小、加粗等格式的文本——是常见但易出错的需求。使用 openpyxl 时,若仅通过 .font、.fill 等基础样式属性复制单元格,会丢失段落级格式信息(例如“AERRORB”中的红色“ERROR”),导致目标单元格显示为纯黑色文本。

根本原因在于:openpyxl 默认以“整体字体”方式读取单元格样式(.font 是单一 Font 对象),而富文本实际由 Cell.rich_text 属性(返回 list[Text])存储多个带独立样式的文本片段。要保留该结构,必须在加载源工作簿时显式启用 rich_text=True:

from openpyxl import load_workbook

def copy_cell_with_format(
    source_filename, 
    source_sheet, 
    source_cell, 
    destination_filename, 
    destination_sheet, 
    destination_cell
):
    # ✅ 关键:启用 rich_text 支持,确保 source_ws[source_cell].value 返回 RichText 对象
    source_workbook = load_workbook(filename=source_filename, rich_text=True)
    source_ws = source_workbook[source_sheet]

    dest_workbook = load_workbook(filename=destination_filename)
    dest_ws = dest_workbook[destination_sheet]

    # ✅ 直接赋值 .value —— 此时 value 是 openpyxl.styles.RichText 实例,自动携带全部格式
    dest_ws[destination_cell].value = source_ws[source_cell].value

    dest_workbook.save(destination_filename)
    print(f"✅ 富文本已成功复制至 {destination_filename}!{destination_sheet}!{destination_cell}")

# 使用示例
copy_cell_with_format(
    source_filename="formatted_text.xlsx",
    source_sheet="Sheet1",
    source_cell="A1",
    destination_filename="y9t_mpp(auto).xlsx",
    destination_sheet="Sheet3",
    destination_cell="F1"
)

⚠️ 重要注意事项

Python对Excel操作详解 中文WORD版

本文档主要介绍如何通过python对office excel进行读写操作,使用了xlrd、xlwt和xlutils模块。另外还演示了如何通过Tcl tcom包对excel操作。感兴趣的朋友可以过来看看

  • rich_text=True 仅影响 读取 行为,且仅对 .value 属性生效;它不会改变 .font 或 .fill 的行为(它们仍返回整体样式)。
  • 目标工作簿无需特殊参数加载,openpyxl 在写入时会自动识别并序列化 RichText 对象。
  • 不支持跨工作簿复制 RichText 后再修改其内部片段(如单独改某一段颜色)——若需动态编辑富文本,请使用 openpyxl.styles.RichText() 构造新对象。
  • 确保源 Excel 文件中该单元格确实为富文本格式(可通过 Excel 界面双击编辑、用鼠标选中部分文字设置不同颜色来验证)。

总结:复制富文本的核心不是“复制样式”,而是“传递富文本对象本身”。启用 rich_text=True + 直接赋值 .value,即可零配置、高保真地完成跨文件富文本迁移。