我想用Python编写一个程序,检查MS Word文件(.docx)的一些属性,例如边距、字体名称和字体大小。(在继续之前,我应该指出,老实说,我不知道我在干什么)
对于字体部分,我遇到了真正的问题:
根据:
https://python-docx.readthedocs.io/en/latest/user/styles-understanding.html
“一个样式可以从另一个样式继承属性,类似于Cascading Style Sheets (CSS)的工作原理。 继承是使用base_style属性指定的。通过基于另一个样式创建一个样式,可以形成任意深度的继承层次结构。 没有基本样式的样式继承文档默认值的属性。”
因此,我尝试了这段代码:
d = Document('1.docx')
d_styles = d.styles
for st in d_styles:
if st.name != "No List": #Ignoring The Numbering Style
print(st.type, st.name, st.base_style)
#print(dir(st.base_style), '\n') there is no such thing as font in dir(st.base_style)
st.base_style 返回 "None"
因此,基于“没有基础样式的样式从文档默认值继承属性”的原则,答案应该在这部分中。但是我不知道如何达到它。
下面的代码也返回了 "None":
for st in d_styles:
if st.name != "No List": #Ignoring The Numbering Style
print(st.font.name)
#Outputs: None
for para in d.paragraphs:
for r in para.runs:
print (r.font.name)
#Outputs: None
for para in d.paragraphs:
print(para.style.font.name)
#Outputs: None
我使用了以下资源:
https://python-docx.readthedocs.io/en/latest/api/style.html
https://python-docx.readthedocs.io/en/latest/user/styles-understanding.html
编辑:
我尝试将样式对象视为字典处理:
for key, value in styles.items() :
print (key, value)
#ERROR: 'Styles' object has no attribute 'items'
print(styles.items())
#ERROR: 'Styles' object has no attribute 'items'
print(styles.keys())
#ERROR: 'Styles' object has no attribute 'keys'
print(styles.values())
#ERROR: 'Styles' object has no attribute 'values'
即使这段代码返回了None:
style = d.styles['Normal']
f = style.font
print(f.name)
python-docx
有任何API支持来获取或设置它。 - scanny