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

Ms word 使用OpenXML替换Word 2010文本框中的内容,ms-word,openxml,openxml-sdk,bookmarks,textbox,Ms Word,Openxml,Openxml Sdk,Bookmarks,Textbox,使用OpenXMLSDK,我成功地通过编程在word文档中查找书签或文本字符串并插入新内容。我正在使用OpenXmlPowerTools.SearchAndReplacer进行文本搜索和替换,以及本文对书签的回答 当书签或我试图替换的文本位于文本框内时,这一切都会失败 为什么两种方法都不能在文本框中工作?我正在尝试替换Word文档中的内容,但我无法找出问题所在 有人对可能出现的问题有什么建议吗?谢谢以下是一个简单文本框的XML,其中包含单词test: <w:pict xmlns:w="ht

使用OpenXMLSDK,我成功地通过编程在word文档中查找书签或文本字符串并插入新内容。我正在使用OpenXmlPowerTools.SearchAndReplacer进行文本搜索和替换,以及本文对书签的回答

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

为什么两种方法都不能在文本框中工作?我正在尝试替换Word文档中的内容,但我无法找出问题所在


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

以下是一个简单文本框的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>

测试

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

我这样做了-在没有多次运行文本(如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

Docx文档基本上是一个XML文档。您提到的方法可能会搜索将文本作为内容的正确类型的标记。但是,Textbox可能有一个完全不同的标记,而您的代码只是忽略了它。我会检查底层XML中有一个带有Textbox的文档,看看它是如何保存在那里的。