使用Open XML SDK我已经成功地以编程方式在word文档中查找书签或文本字符串并插入新内容。我正在使用OpenXmlPowerTools.SearchAndReplacer进行文本搜索和替换以及此帖子对书签的回答Replace bookmark text in Word file using Open XML SDK
当我尝试替换的书签或文本位于文本框内时,这一切都失败了。
为什么两种方法都不能在文本框中工作? Word文档我试图替换内容使用Texboxes进行布局,我无法解决问题所在。
有人对可能出现的问题有什么建议吗?感谢
答案 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>
您可以看到结构与书签中的文本搜索不同,因为文本框实际上存储为图片。如果您调整搜索算法来处理这种不同的结构,那么您应该能够找到文本并替换它。