Python-docx检测表格文本hidden属性报错及文本替换问题
报错原因
你当前循环中定义的i是整数类型的索引值,本身不存在font属性,你需要通过索引取到对应的run对象后,再读取隐藏属性做判断。
修正后的代码
import re # 提前编译你的正则规则,提升运行效率 regx = re.compile(r'替换为你实际使用的正则匹配规则') for table in doc.tables: for row in table.rows: for cell in row.cells: for p in cell.paragraphs: # 直接遍历run对象,不需要额外获取索引 for run in p.runs: # 跳过隐藏文本,未明确设置hidden属性时默认值为None,按非隐藏处理 if run.font.hidden: continue # 正则替换需使用re.sub,不要用字符串原生的replace方法 run.text = regx.sub('Abcd', run.text)
额外说明
- 如果你仍要保留原来的索引遍历写法,只需要把
i.font.hidden修改为inline[i].font.hidden即可解决报错 - 部分未显式设置隐藏属性的文本,
font.hidden会返回None,直接判断if run.font.hidden即可兼容这种场景,不需要额外加== True的判断 - 你原有代码中用字符串
replace方法无法实现正则规则匹配,要做正则替换必须使用re.sub方法
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

