使用OpenXML替换Word 2010文本框中的内容

时间:2011-06-20 22:47:04

标签: ms-word openxml openxml-sdk bookmarks textbox

使用Open XML SDK我已经成功地以编程方式在word文档中查找书签或文本字符串并插入新内容。我正在使用OpenXmlPowerTools.SearchAndReplacer进行文本搜索和替换以及此帖子对书签的回答Replace bookmark text in Word file using Open XML SDK

当我尝试替换的书签或文本位于文本框内时,这一切都失败了。

为什么两种方法都不能在文本框中工作? Word文档我试图替换内容使用Texboxes进行布局,我无法解决问题所在。

有人对可能出现的问题有什么建议吗?感谢

2 个答案:

答案 0 :(得分:2)

我这样做了 - 如果没有多个带文本的运行(如1个字粗体

),它适用于文本框
    Dim searchQuery = From tx In mainPart.Document.Body.Descendants(Of Text)()
        Where tx.Text.Contains(replaceData.OldText)

    Dim i As Integer
    For i = 0 To searchQuery.Count - 1
        searchQuery(i).Text = searchQuery(i).Text.Replace(replaceData.OldText, replaceData.NewText)
    Next

答案 1 :(得分:1)

以下是一个简单文本框的XML,其中包含单词test:

<w:pict xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
  <v:shapetype id="_x0000_t202" coordsize="21600,21600" o:spt="202" path="m,l,21600r21600,l21600,xe" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:v="urn:schemas-microsoft-com:vml">
    <v:stroke joinstyle="miter" />
    <v:path gradientshapeok="t" o:connecttype="rect" />
  </v:shapetype>
  <v:shape id="_x0000_s1027" style="position:absolute;margin-left:0;margin-top:0;width:186.35pt;height:110.6pt;z-index:251660288;mso-width-percent:400;mso-height-percent:200;mso-position-horizontal:center;mso-width-percent:400;mso-height-percent:200;mso-width-relative:margin;mso-height-relative:margin" type="#_x0000_t202" xmlns:v="urn:schemas-microsoft-com:vml">
    <v:textbox style="mso-fit-shape-to-text:t">
      <w:txbxContent>
        <w:p w:rsidR="00B558B5" w:rsidRDefault="00B558B5">
          <w:proofErr w:type="gramStart" />
          <w:r>
            <w:t>test</w:t>
          </w:r>
          <w:proofErr w:type="gramEnd" />
        </w:p>
      </w:txbxContent>
    </v:textbox>
  </v:shape>
</w:pict>

您可以看到结构与书签中的文本搜索不同,因为文本框实际上存储为图片。如果您调整搜索算法来处理这种不同的结构,那么您应该能够找到文本并替换它。