如何使用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
相关产品推荐
相关产品推荐

