Docx不会替换从熊猫中提取的文本

时间:2019-09-05 03:27:37

标签: python pandas docx

我正在创建一个程序以提取某些文本并更改名称以及公司的名称以个性化消息。但是,当我从excel表中提取名称以及公司名称时,打印功能只会打印出未编辑的表格。

我尝试使用另一个库OpenPyXl。我也尝试过不使用字典。但总是以相同的方式结束。

firm = []
for x in range(len(list_of)):
    firm.append(list_of.iloc[x,1])

name = []

for x in range(len(list_of)):
    name.append(list_of.iloc[x,0])

for integer in range(len(firm)):

    dic = {'firstname':name[integer],'your_firm': firm[integer]}
    for p in form.paragraphs:
        inline = p.runs
        for i in range(len(inline)):
            text = inline[i].text
            if text in dic.keys():
                text=text.replace(text,dic[text])
                inline[i].text = text
        print(p.text)

我希望打印功能返回类似“ Microsoft的尊敬的约翰”的字样。

1 个答案:

答案 0 :(得分:0)

您很可能是w:t上分裂单词的受害者。

说明:

典型的word/document.xml如下所示:

<w:body>
  <w:p w:rsidR="001A6335" w:rsidRPr="0059122C" w:rsidRDefault="0059122C" w:rsidP="0059122C">
    <w:r>
      <w:t>Hello {n</w:t>
    </w:r>
    <w:proofErr w:type="spellStart"/>
    <w:r w:rsidR="008B4316">
      <w:t>am</w:t>
    </w:r>
    <w:proofErr w:type="spellEnd"/>
    <w:r>
      <w:t>e}</w:t>
    </w:r>
    <w:bookmarkStart w:id="0" w:name="_GoBack"/>
    <w:bookmarkEnd w:id="0"/>
  </w:p>
  <w:sectPr w:rsidR="001A6335" w:rsidRPr="0059122C" w:rsidSect="001A6335">
    <w:headerReference w:type="default" r:id="rId7"/>
    <w:footerReference w:type="default" r:id="rId8"/>
    <w:pgSz w:w="12240" w:h="15840"/>
    <w:pgMar w:top="1440" w:right="1800" w:bottom="1440" w:left="1800" w:header="720" w:footer="720" w:gutter="0"/>
    <w:cols w:space="720"/>
    <w:docGrid w:linePitch="360"/>
  </w:sectPr>
</w:body>

标记为w:body(用于整个文档),然后将文档分为多个w:p(段落)。还有w:sectPr,它定义了用于该文档的页眉/页脚。

w:p内,有多个w:r(行程)。每次运行定义自己的样式(文本的颜色,字体大小,...),并且每次运行都包含多个w:t(文本部分)。

如您所见,像Hello {name}这样的简单句子可能会分成多个w:t,这使得模板的实现非常困难。

在您的示例中,替换很可能是在“ first_name”上完成的,但是此字符串可能会拆分为多个w:t

我建议您使用为此目的而创建的工具:https://github.com/elapouya/python-docx-template

我也自己维护了这样的模块,但是它还是使用Javascript运行的(在浏览器或服务器上),如果您仍然有兴趣,请参见https://github.com/open-xml-templating/docxtemplater