如何使用python链接word文档中的内容控制框

2024-05-29 03:07:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用PythonDocx编辑word文档。我正在尝试向跑步中添加内容控制框。 我编写了以下代码:

def addNew(run, content):
 
    sdt = OxmlElement('w:sdt')
    sdtPr = OxmlElement('w:sdtPr')
    sdt.append(sdtPr)

    alias=OxmlElement('w:alias')
    alias.set(qn('w:val'),"Status")
    tag=OxmlElement('w:tag')
    tag.set(qn('w:val'),"")
    id=OxmlElement('w:id')
    id.set(qn('w:val'), "992912514")
    placeholder=OxmlElement('w:placeholder')
    docpart=OxmlElement('w:docPart')
    placeholder.append(docpart)

    sdtPr.append(alias)
    sdtPr.append(tag)
    sdtPr.append(id)
    sdtPr.append(placeholder)

    sdtContent = OxmlElement('w:sdtContent')
    sdtContentRun = OxmlElement('w:r')
    sdtContentRunText = OxmlElement('w:t')
    sdtContentRunText.text= content
    sdtContentRun.append(sdtContentRunText)
    sdtContent.append(sdtContentRun)
    sdt.append(sdtContent)





    r_element = run._r
    r_element.append(sdt)

为了编写上述代码,我利用了这个xml

<w:p xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:cx="http://schemas.microsoft.com/office/drawing/2014/chartex" xmlns:cx1="http://schemas.microsoft.com/office/drawing/2015/9/8/chartex" xmlns:cx2="http://schemas.microsoft.com/office/drawing/2015/10/21/chartex" xmlns:cx3="http://schemas.microsoft.com/office/drawing/2016/5/9/chartex" xmlns:cx4="http://schemas.microsoft.com/office/drawing/2016/5/10/chartex" xmlns:cx5="http://schemas.microsoft.com/office/drawing/2016/5/11/chartex" xmlns:cx6="http://schemas.microsoft.com/office/drawing/2016/5/12/chartex" xmlns:cx7="http://schemas.microsoft.com/office/drawing/2016/5/13/chartex" xmlns:cx8="http://schemas.microsoft.com/office/drawing/2016/5/14/chartex" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:aink="http://schemas.microsoft.com/office/drawing/2016/ink" xmlns:am3d="http://schemas.microsoft.com/office/drawing/2017/model3d" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w16cex="http://schemas.microsoft.com/office/word/2018/wordml/cex" xmlns:w16cid="http://schemas.microsoft.com/office/word/2016/wordml/cid" xmlns:w16="http://schemas.microsoft.com/office/word/2018/wordml" xmlns:w16sdtdh="http://schemas.microsoft.com/office/word/2020/wordml/sdtdatahash" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" w14:paraId="679DE62B" w14:textId="181395C1" w:rsidR="00F97E53" w:rsidRDefault="00AE002B" w:rsidP="00AE002B">
  <w:r>
    <w:t>Person 1:</w:t>
  </w:r>
  <w:sdt>
    <w:sdtPr>
      <w:alias w:val="Status"/>
      <w:tag w:val=""/>
      <w:id w:val="-181209092"/>
      <w:placeholder>
        <w:docPart w:val="FBBB6BD83ED342F392CC239ED6600AF4"/>
      </w:placeholder>
      <w:dataBinding w:prefixMappings="xmlns:ns0='http://purl.org/dc/elements/1.1/' xmlns:ns1='http://schemas.openxmlformats.org/package/2006/metadata/core-properties' " w:xpath="/ns1:coreProperties[1]/ns1:contentStatus[1]" w:storeItemID="{6C3C8BC8-F283-45AE-878A-BAB7291924A1}"/>
      <w:text/>
    </w:sdtPr>
    <w:sdtEndPr/>
    <w:sdtContent>
      <w:r>
        <w:t>You</w:t>
      </w:r>
    </w:sdtContent>
  </w:sdt>
</w:p>

内容控制框确实会被添加,但是当我在一个框中编辑文本时,它们不会自动更改。我在两个地方使用我的代码添加了内容控制框。使用“我的代码”添加内容控件后生成的xml如下所示:

<w:p xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:cx="http://schemas.microsoft.com/office/drawing/2014/chartex" xmlns:cx1="http://schemas.microsoft.com/office/drawing/2015/9/8/chartex" xmlns:cx2="http://schemas.microsoft.com/office/drawing/2015/10/21/chartex" xmlns:cx3="http://schemas.microsoft.com/office/drawing/2016/5/9/chartex" xmlns:cx4="http://schemas.microsoft.com/office/drawing/2016/5/10/chartex" xmlns:cx5="http://schemas.microsoft.com/office/drawing/2016/5/11/chartex" xmlns:cx6="http://schemas.microsoft.com/office/drawing/2016/5/12/chartex" xmlns:cx7="http://schemas.microsoft.com/office/drawing/2016/5/13/chartex" xmlns:cx8="http://schemas.microsoft.com/office/drawing/2016/5/14/chartex" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:aink="http://schemas.microsoft.com/office/drawing/2016/ink" xmlns:am3d="http://schemas.microsoft.com/office/drawing/2017/model3d" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w16cex="http://schemas.microsoft.com/office/word/2018/wordml/cex" xmlns:w16cid="http://schemas.microsoft.com/office/word/2016/wordml/cid" xmlns:w16="http://schemas.microsoft.com/office/word/2018/wordml" xmlns:w16sdtdh="http://schemas.microsoft.com/office/word/2020/wordml/sdtdatahash" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" w14:paraId="4BF918D8" w14:textId="79715864" w:rsidR="00AE002B" w:rsidRDefault="00AE002B" w:rsidP="00AE002B">
  <w:r>
    <w:t>Person 2: Kate</w:t>
  </w:r>
  <w:r>
    <w:sdt>
      <w:sdtPr>
        <w:alias w:val="Status"/>
        <w:tag w:val=""/>
        <w:id w:val="992912514"/>
        <w:placeholder>
          <w:docPart/>
        </w:placeholder>
      </w:sdtPr>
      <w:sdtContent>
        <w:r>
          <w:t>&lt;Doct control&gt;</w:t>
        </w:r>
      </w:sdtContent>
    </w:sdt>
  </w:r>
</w:p>

<w:p xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:cx="http://schemas.microsoft.com/office/drawing/2014/chartex" xmlns:cx1="http://schemas.microsoft.com/office/drawing/2015/9/8/chartex" xmlns:cx2="http://schemas.microsoft.com/office/drawing/2015/10/21/chartex" xmlns:cx3="http://schemas.microsoft.com/office/drawing/2016/5/9/chartex" xmlns:cx4="http://schemas.microsoft.com/office/drawing/2016/5/10/chartex" xmlns:cx5="http://schemas.microsoft.com/office/drawing/2016/5/11/chartex" xmlns:cx6="http://schemas.microsoft.com/office/drawing/2016/5/12/chartex" xmlns:cx7="http://schemas.microsoft.com/office/drawing/2016/5/13/chartex" xmlns:cx8="http://schemas.microsoft.com/office/drawing/2016/5/14/chartex" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:aink="http://schemas.microsoft.com/office/drawing/2016/ink" xmlns:am3d="http://schemas.microsoft.com/office/drawing/2017/model3d" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w16cex="http://schemas.microsoft.com/office/word/2018/wordml/cex" xmlns:w16cid="http://schemas.microsoft.com/office/word/2016/wordml/cid" xmlns:w16="http://schemas.microsoft.com/office/word/2018/wordml" xmlns:w16sdtdh="http://schemas.microsoft.com/office/word/2020/wordml/sdtdatahash" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" w14:paraId="0C58DC2F" w14:textId="55CCE8B3" w:rsidR="0010132B" w:rsidRPr="00AE002B" w:rsidRDefault="0010132B" w:rsidP="00AE002B">
  <w:r>
    <w:t>Person 3: Ken</w:t>
  </w:r>
  <w:r>
    <w:sdt>
      <w:sdtPr>
        <w:alias w:val="Status"/>
        <w:tag w:val=""/>
        <w:id w:val="992912514"/>
        <w:placeholder>
          <w:docPart/>
        </w:placeholder>
      </w:sdtPr>
      <w:sdtContent>
        <w:r>
          <w:t>&lt;Doct control&gt;</w:t>
        </w:r>
      </w:sdtContent>
    </w:sdt>
  </w:r>
</w:p>

当我在一个控件中更改文本时,是否有方法更改所有内容控件的内容


Tags: orgcomhttpvalschemasmicrosoftwordoffice

热门问题