C# 替换 docx 中的文本字符串

问题描述 投票:0回答:3

使用 C#,有没有一种好方法可以在 docx 文件中查找和替换文本字符串,而无需在该计算机上安装 word?

c# replace openxml docx openxml-sdk
3个回答
4
投票

是的,使用Open XML。这里有一篇文章可以解决您的具体问题:为 Word 2007 Open XML 格式文档创建简单的搜索和替换实用程序

要使用此文件格式,一种选择是使用 Open XML 格式化应用程序编程接口 (API) DocumentFormat.OpenXml.Packaging 命名空间。类、方法和 此命名空间中的属性位于 DocumentFormat.OpenXml.dll 文件。您可以通过以下方式安装此 DLL 文件 安装 Open XML 格式 SDK 版本 1.0。本次活动的成员 命名空间允许您轻松使用 Excel 的包内容 2007 工作簿、PowerPoint 2007 演示文稿和 Word 2007 文件。

...

Private Sub Search_Replace(ByVal file As String)
Dim wdDoc As WordprocessingDocument = WordprocessingDocument.Open(file, True)

' Manage namespaces to perform Xml XPath queries.
Dim nt As NameTable = New NameTable
Dim nsManager As XmlNamespaceManager = New XmlNamespaceManager(nt)
nsManager.AddNamespace("w", wordmlNamespace)

' Get the document part from the package.
Dim xdoc As XmlDocument = New XmlDocument(nt)
' Load the XML in the part into an XmlDocument instance.
xdoc.Load(wdDoc.MainDocumentPart.GetStream)

' Get the text nodes in the document.
Dim nodes As XmlNodeList = Nothing
nodes = xdoc.SelectNodes("//w:t", nsManager)
Dim node As XmlNode
Dim nodeText As String = ""

' Make the swap.
Dim oldText As String = txtOldText.Text
Dim newText As String = txtNewText.Text
For Each node In nodes
   nodeText = node.FirstChild.InnerText
   If (InStr(nodeText, oldText) > 0) Then
      nodeText = nodeText.Replace(oldText, newText)
      ' Increment the occurrences counter.
      numChanged += 1
   End If
Next

' Write the changes back to the document.
xdoc.Save(wdDoc.MainDocumentPart.GetStream(FileMode.Create))

' Display the number of change occurrences.
txtNumChanged.Text = numChanged
End Sub

0
投票

您也可以尝试Aspose.Words for .NET以便查找并替换Word文档中的文本。该组件不需要安装 MS Office。该 API 非常简单且易于使用和实现。

披露:我在 Aspose 担任开发人员布道师。


0
投票

或者您可以尝试 DocxTemplater。一个开源库。不像 Aspose 那样复杂,而是开源的。 https://github.com/Amberg/DocxTemplater

© www.soinside.com 2019 - 2024. All rights reserved.