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

如何使用Python-Docx解析Docx文档并保留原有文本格式?

Python-docx导出到Excel保留上标等字符样式的解决方案

现有代码的核心问题

  • 执行顺序错误:代码中尝试给r.font.superscript赋值时,r变量还未创建,样式设置根本没有生效
  • 普通字符串无法承载格式:你将所有run的纯文本直接拼接进scripture字符串,这个过程会直接丢弃所有字体样式属性
  • pandas默认导出仅支持纯文本:常规pandas写入Excel的方法只会保存纯文本内容,不会处理字符级的格式差异

具体实现方案

方案1:在Excel单元格中保留可编辑的上标格式

需要借助openpyxl库的富文本功能实现,完整流程如下:
首先安装依赖:
pip install python-docx pandas openpyxl

代码示例:

from docx import Document
import openpyxl
from openpyxl.cell.rich_text import TextBlock, CellRichText
from openpyxl.styles import Font

# 1. 提取docx中每个run的文本和样式信息
document = Document("你的文档路径.docx")
all_paragraphs_data = []

for para in document.paragraphs:
    para_runs = []
    for run in para.runs:
        # 记录每个run的文本和上标属性,可扩展记录粗体、斜体等更多样式
        para_runs.append({
            "text": run.text,
            "superscript": run.font.superscript
        })
    all_paragraphs_data.append(para_runs)

# 2. 生成带富文本的Excel文件
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "经文内容"

# 写入表头
ws.append(["内容"])

# 逐行写入富文本
for para_runs in all_paragraphs_data:
    rich_text = CellRichText()
    for run_info in para_runs:
        # 针对不同样式创建对应的Font对象
        font = Font(superscript=run_info["superscript"])
        rich_text.append(TextBlock(font, run_info["text"]))
    # 富文本直接赋值给单元格
    ws.append([rich_text])

# 保存文件
wb.save("导出结果.xlsx")

方案2:将格式编码为字符串标记(适合后续程序处理)

如果你不需要在Excel里直接显示上标,只是要把格式信息留存到字符串中,可以直接用HTML标签标记,拼接后的字符串自带格式标识:

document = Document("你的文档路径.docx")
scripture = ""

for para in document.paragraphs:
    for run in para.runs:
        if run.font.superscript:
            # 上标内容包上<sup>标签
            scripture += f"<sup>{run.text}</sup>"
        else:
            scripture += run.text
    # 可选:段落之间加换行符
    scripture += "\n"

# 后续可以直接把这个带标签的字符串存入pandas的单元格导出即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:57:03