如何用Python读取Word表格单元格中空段落的字体大小?
读取Word表格中空段落的字体大小
在Word中,段落间按回车会生成空段落,选中回车符调整字体大小可改变空行高度。现在需要用Python读取表格单元格内这类空段落的字体大小,以此计算文本上方空白区域总高度(比如3个小字号回车高度等价于2个大字号回车)。
目前可以通过以下代码读取有内容段落的字体大小:
for cell in column.cells: for paragraph in cell.paragraphs: if paragraph.text == "": print(font size of the empty line) for run in paragraph.runs: font_size = run.font.size # 获取非空文本的字号
但空段落的paragraph.text为空字符串,不存在run对象,无法通过上述方式获取字号。尝试paragraph.style.font.size、paragraph.style.base_style、paragraph.text.format、paragraph.paragraph_format.space_before、paragraph.paragraph_format.line_spacing等方法均未成功,尽管在Word样式库中能看到该空段落的准确字号。
解决方法
空段落的字号信息存储在段落的XML结构中,可以通过直接操作python-docx的底层XML元素来获取:
from docx import Document from docx.oxml.ns import qn doc = Document("your_document.docx") for table in doc.tables: for row in table.rows: for cell in row.cells: for paragraph in cell.paragraphs: if paragraph.text.strip() == "": # 获取段落的XML元素 p = paragraph.element # 查找字号设置 sz = p.find(qn('w:rPr/w:sz')) if sz is not None: # Word中字号单位是半个点,除以2得到pt值 font_size = int(sz.get(qn('w:val'))) / 2 print(f"空段落字号:{font_size}pt") else: # 读取段落样式的字号作为备选 style_font_size = paragraph.style.font.size if style_font_size is not None: print(f"空段落样式字号:{style_font_size.pt}pt") else: print("未找到字号信息") else: # 原有非空段落的读取逻辑 for run in paragraph.runs: if run.font.size: print(f"非空段落字号:{run.font.size.pt}pt")
说明
- Word的XML中,字号
w:sz的值单位是半个点(half-point),需要除以2得到常规的pt(磅)单位。 - 如果空段落没有单独设置字号,则读取其应用的段落样式字号作为 fallback。
内容的提问来源于stack exchange,提问作者parase
相关产品推荐
相关产品推荐

