
使用 openpyxl 复制 Excel 单元格中的富文本(如红黑混排文字)时,必须启用 rich_text=True 参数加载源工作簿,否则仅能获取纯文本值,丢失所有内嵌格式;直接赋值 .value 即可完整保留 RichText 对象。
使用 openpyxl 复制 excel 单元格中的富文本(如红黑混排文字)时,必须启用 `rich_text=true` 参数加载源工作簿,否则仅能获取纯文本值,丢失所有内嵌格式;直接赋值 `.value` 即可完整保留 richtext 对象。
openpyxl 自 3.1.0 版本起原生支持富文本(RichText)读取与写入,但该功能默认关闭。若未显式启用 rich_text=True,cell.value 将退化为普通字符串,所有颜色、字体大小、粗体/斜体等格式信息均被丢弃——这正是原始代码中“红色文字变黑”的根本原因。
✅ 正确做法是:
- 加载源工作簿时传入 rich_text=True;
- 直接将源单元格的 .value(此时为 openpyxl.cell.rich_text.RichText 对象)赋值给目标单元格;
- 无需手动复制字体、填充等样式——富文本对象已封装全部段落级格式。
以下是精简可靠的实现代码:
from openpyxl import load_workbook
def copy_rich_text_cell(
source_filename: str,
source_sheet: str,
source_cell: str,
destination_filename: str,
destination_sheet: str,
destination_cell: str
):
# 关键:启用 rich_text 支持以读取格式化文本
source_wb = load_workbook(filename=source_filename, rich_text=True)
source_ws = source_wb[source_sheet]
dest_wb = load_workbook(filename=destination_filename)
dest_ws = dest_wb[destination_sheet]
# 直接赋值 RichText 对象(自动保留所有内嵌格式)
dest_ws[destination_cell].value = source_ws[source_cell].value
dest_wb.save(destination_filename)
print(f"✅ 富文本已成功从 {source_filename}!{source_sheet}!{source_cell} 复制到 {destination_filename}!{destination_sheet}!{destination_cell}")
# 使用示例
copy_rich_text_cell(
source_filename="formatted_text.xlsx",
source_sheet="Sheet1",
source_cell="A1",
destination_filename="y9t_mpp(auto).xlsx",
destination_sheet="Sheet3",
destination_cell="F1"
)⚠️ 注意事项:
- 目标工作簿无需 rich_text=True:写入时 openpyxl 会自动识别并序列化 RichText 对象;
- 仅支持 .xlsx 格式:.xls(旧版二进制格式)不被 openpyxl 支持;
- 不兼容合并单元格的富文本复制:若源单元格处于合并区域,需先取消合并或特殊处理;
- 避免手动操作 .font / .fill:富文本格式独立于单元格整体样式,强行覆盖反而可能破坏原有结构;
- 建议升级 openpyxl 至 ≥3.1.2(修复了早期 rich_text 的若干边界 bug)。
总结:富文本复制的本质不是“复制样式”,而是“传递 RichText 对象”。启用 rich_text=True 是解锁该能力的唯一开关,其余操作应保持简洁——让 openpyxl 内部机制完成格式保真。


















