如何用Python-docx为Word段落中特定二进制子串设置深红色字体?
解决Python生成Word时高亮单引号内二进制子串的问题
我之前也处理过类似的需求,用python-docx库就能完美实现!核心思路是不要直接给整个段落设置格式,而是把文本拆分成普通内容和需要高亮的二进制子串,分别作为独立的Run对象添加到段落中,给目标Run单独设置深红色字体即可。
步骤1:安装依赖
首先确保你安装了python-docx:
pip install python-docx
步骤2:编写格式化代码
下面是完整的可运行示例,包含从文本拆分到格式设置的全部逻辑:
import re from docx import Document from docx.shared import RGBColor def add_highlighted_paragraph(doc, raw_text): # 创建一个空段落 para = doc.add_paragraph() # 正则匹配单引号包裹的二进制子串(仅0和1组成) binary_pattern = re.compile(r"'[01]+'") last_index = 0 # 遍历所有匹配到的子串 for match in binary_pattern.finditer(raw_text): # 添加匹配前的普通文本(默认格式) if last_index < match.start(): para.add_run(raw_text[last_index:match.start()]) # 添加高亮的二进制子串,设置深红色 highlight_run = para.add_run(match.group()) highlight_run.font.color.rgb = RGBColor(0x8B, 0x00, 0x00) # 标准深红色,可按需调整 # 更新最后处理的位置 last_index = match.end() # 添加文本末尾剩余的普通内容 if last_index < len(raw_text): para.add_run(raw_text[last_index:]) # 测试:模拟从Excel读取的内容 if __name__ == "__main__": doc = Document() excel_extracted_text = "设备状态说明:'001'表示正常运行,'101'表示故障预警,'000'表示停机维护" add_highlighted_paragraph(doc, excel_extracted_text) # 保存文档 doc.save("设备状态文档.docx")
关键细节说明
- 正则表达式:
r"'[01]+'"专门匹配单引号包裹的纯二进制字符串(仅0和1),如果你的场景中存在中文单引号,可以修改为r"['’][01]+['’]"来兼容。 - Run对象:
python-docx中每个段落由多个Run组成,每个Run可以独立设置字体颜色、大小等格式,这是实现局部高亮的核心。 - 颜色选择:示例中用的
0x8B0000是比较柔和的深红色,如果你需要更鲜艳的红色,可以换成RGBColor(0xFF, 0x00, 0x00)(纯红色)。
整合Excel读取逻辑
如果你已经用openpyxl或pandas读取了Excel内容,只需要把每个单元格的文本传入add_highlighted_paragraph函数即可,比如:
# 示例:用openpyxl读取Excel单元格文本 from openpyxl import load_workbook wb = load_workbook("数据表格.xlsx") ws = wb.active doc = Document() for row in ws.iter_rows(values_only=True): for cell_text in row: if cell_text: # 跳过空单元格 add_highlighted_paragraph(doc, str(cell_text)) doc.save("生成的文档.docx")
这样处理后,所有单引号内的二进制子串都会自动变成深红色,完全符合你的需求!
内容的提问来源于stack exchange,提问作者Stephen Ellwood
相关产品推荐
相关产品推荐

