You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测Excel富文本格式?openpyxl 3.1.2安装与使用求助

解决Excel转CSV保留单元格内混合文本格式问题

问题背景

作为编程新手,需要将Excel文件转换为CSV时保留单元格内部分文字的加粗、斜体等格式,计划通过添加HTML标签记录格式,但目前仅能检测整单元格格式,无法识别单元格内的混合格式文本。尝试安装openpyxl 3.1.2以处理富文本(rich text)但失败,寻求成功实现混合格式检测的方法或其他可行解决方案。

原基础代码:

from openpyxl import load_workbook

wb = load_workbook("file.xslx")
ws = wb.active

text = []

for row in ws.iter_rows():
    for cell in row:
        text.append(cell.value)
        if cell.font.bold:
            cell.value = f'<b>{cell.value}</b>'
        if cell.font.italic:
            cell.value = f'<em>{cell.value}</em>'
wb.save("modified_file.xslx")

解决方案

1. 解决openpyxl 3.1.2安装失败问题

如果直接用pip install openpyxl==3.1.2安装失败,大概率是网络问题,换国内PyPI源重试:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple openpyxl==3.1.2

2. 处理单元格内混合格式的代码实现

openpyxl的RichText对象可以解析单元格内的分段格式(每个分段称为Run,对应一段格式统一的文本),修改代码如下:

from openpyxl import load_workbook
from openpyxl.cell.text import RichText

wb = load_workbook("file.xlsx")  # 注意原代码扩展名写错,应为xlsx
ws = wb.active

for row in ws.iter_rows():
    for cell in row:
        # 处理富文本(混合格式)
        if isinstance(cell.value, RichText):
            formatted_content = ""
            # 遍历每个格式分段
            for run in cell.value:
                segment = run.text
                # 根据分段的格式添加HTML标签
                if run.font.bold:
                    segment = f"<b>{segment}</b>"
                if run.font.italic:
                    segment = f"<em>{segment}</em>"
                formatted_content += segment
            cell.value = formatted_content
        else:
            # 处理普通文本(整单元格统一格式)
            plain_content = str(cell.value) if cell.value is not None else ""
            if cell.font.bold:
                plain_content = f"<b>{plain_content}</b>"
            if cell.font.italic:
                plain_content = f"<em>{plain_content}</em>"
            cell.value = plain_content

wb.save("modified_file.xlsx")

说明:

  • 先判断单元格内容是否为RichText对象,是则遍历每个格式分段处理
  • 每个Run对象包含该段文本的text内容和font格式属性,可单独判断加粗、斜体
  • 原代码里的文件扩展名错误(xslx应为xlsx),已修正

3. 其他可行方案

  • 使用win32com.client(仅Windows):直接调用本地Excel程序的API读取富文本格式,适合依赖Excel环境的场景
  • 生成CSV的补充步骤:保存修改后的Excel文件后,可直接通过Excel另存为CSV,或者在代码中遍历单元格内容,手动写入CSV文件:
    import csv
    
    # 保存修改后的Excel后,生成CSV
    with open("output.csv", "w", encoding="utf-8", newline="") as f:
        writer = csv.writer(f)
        for row in ws.iter_rows(values_only=True):
            writer.writerow(row)
    

内容的提问来源于stack exchange,提问作者isadora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 18:17:45