python docx在导入文档时能否保留字体颜色和样式?
基本上,我需要做的是编写一个程序,接收许多.docx文件,并将它们全部放在一个文件中,以某种方式排序。我已通过以下方式导入工作:python docx在导入文档时能否保留字体颜色和样式?,python,ms-word,Python,Ms Word,基本上,我需要做的是编写一个程序,接收许多.docx文件,并将它们全部放在一个文件中,以某种方式排序。我已通过以下方式导入工作: import docx, os, glob finaldocname = 'Midterm-All-Questions.docx' finaldoc=docx.Document() docstoworkon = glob.glob('*.docx') if finaldocname in docstoworkon: docstoworkon.remove(fi
import docx, os, glob
finaldocname = 'Midterm-All-Questions.docx'
finaldoc=docx.Document()
docstoworkon = glob.glob('*.docx')
if finaldocname in docstoworkon:
docstoworkon.remove(finaldocname) #dont process final doc if it exists
for f in docstoworkon:
doc=docx.Document(f)
fullText=[]
for para in doc.paragraphs:
fullText.append(para.text) #generates a long text list
# finaldoc.styles = doc.styles
for l in fullText:
# if l=='u\'\\n\'':
if '#' in l:
print('We got here!')
if '#1 ' not in l: #check last two characters to see if this is the first question
finaldoc.add_section() #only add a page break between questions
finaldoc.add_paragraph(l)
# finaldoc.add_page_break
# finaldoc.add_page_break
finaldoc.save(finaldocname)
但是我需要保留文本样式,比如字体颜色、大小、斜体等等,它们不在这个方法中,因为它只是获取原始文本并转储它。我在pythondocx文档中找不到任何关于保留文本样式或导入原始文本以外的内容。有人知道如何做到这一点吗?在python docx中使用样式有点困难,但可以做到 请先看,以了解有关样式和单词的一些问题
漫长的道路 当您以
文档()的形式读入文件时,
将引入所有段落
,其中每个段落都包含运行
。这些运行
是具有相同样式的文本块
您可以通过对对象执行len()
来找出有多少个段落或运行,也可以像您在示例中使用段落
一样迭代这些段落或运行
您可以检查任何给定段落的样式,但运行的样式可能与整个段落的样式不同,因此我将跳到运行本身,并使用段落[0]。运行[0]。style
检查那里的样式,这将为您提供一个style对象。您可以检查字体
对象,该对象将告诉您一些信息,如大小
,斜体
,粗体
,等等
现在来看一个长期的解决方案:你首先应该创建一个新的空白段落,然后你应该用你的原文一个接一个地
add_run()
。对于其中的每一个,您都可以定义style
属性,但它必须是第一个链接中描述的命名样式。不能直接应用stlye对象,因为它不会复制属性。但是有一种方法可以解决这个问题:检查您想要复制到输出的属性,然后确保您的新运行应用相同的属性
doc\u out=docx.Document()
对于文件段落中的段落:
p=文件输出。添加段落()
对于磨合段运行:
r=p.add\u运行(run.text)
如果为run.bold:
r、 粗体=真
如果为run.italic:
r、 斜体=真
#等
显然,这是低效的,不是一个很好的解决方案,但它可以确保您已经正确地复制了样式
添加新样式 有一种方法可以解决这个问题,但因为您从中获取文本和样式的Word文档不太可能使用命名样式(而不仅仅是将粗体等应用于您想要的单词),因此要添加许多稍微不同的样式,有时甚至是相同的样式,可能还有很长的路要走
不幸的是,这是我给你的关于如何做到这一点的最好答案。在Python中使用Word、Outlook和Excel文档并不太好,尤其是对于您正在尝试的工作。非常感谢,我非常感谢。