9

我正在使用 Open XML,我应该更改 word 文件标题中的文本。要更改文档中的特定段落,我使用了以下代码:

Dim body = wdDoc.MainDocumentPart.Document.Body
            Dim paras = body.Elements(Of DocumentFormat.OpenXml.Wordprocessing.Paragraph)()
            Dim header = body.Elements(Of DocumentFormat.OpenXml.Wordprocessing.Header)()


            For Each para In paras
                For Each run In para.Elements(Of DocumentFormat.OpenXml.Wordprocessing.Run)()
                    For Each testo In run.Elements(Of DocumentFormat.OpenXml.Wordprocessing.Text)()
                        If (testo.Text.Contains("<$doc_description$>")) Then
                            testo.Text = testo.Text.Replace("<$doc_description$>", "replaced-text")
                        End If
                    Next
                Next
            Next

提前致谢!

4

3 回答 3

12

从汉斯的答案移植到 C#!

 //Gets all the headers
 foreach (var headerPart in doc.MainDocumentPart.HeaderParts)
 {
      //Gets the text in headers
      foreach(var currentText in headerPart.RootElement.Descendants<DocumentFormat.OpenXml.Wordprocessing.Text>())
      {
          currentText.Text = currentText.Text.Replace("[Thanks]", "Thanks");
      }
 }
于 2017-03-09T15:25:34.217 回答
8

您可以使用以下代码替换 word 文档标题中的标签:

Using wdDoc = WordprocessingDocument.Open("header.docx", True)

  For Each headerPart In wdDoc.MainDocumentPart.HeaderParts
    For Each currentParagraph In headerPart.RootElement.Descendants(Of DocumentFormat.OpenXml.Wordprocessing.Paragraph)()
      For Each currentRun In currentParagraph.Descendants(Of DocumentFormat.OpenXml.Wordprocessing.Run)()
        For Each currentText In currentRun.Descendants(Of DocumentFormat.OpenXml.Wordprocessing.Text)()

          If (currentText.Text.Contains("$doc-description$")) Then
            Console.WriteLine("found")
            currentText.Text = currentText.Text.Replace("$doc-description$", "replaced-text")
          End If

        Next
      Next
    Next
  Next

End Using

首先,枚举所有HeaderParts的word文档。然后搜索Text包含要替换的标签的所有元素。然后用您的文本替换标签。

请注意,您应该使用不带<>_字符的标签。如果您的标签包含这些字符,那么 word 会将文本拆分为多个Text元素。

如果要更改表格(或任何其他元素)中的文本,只需搜索所有Text元素:

Using wdDoc = WordprocessingDocument.Open("header.docx", True)

  For Each headerPart In wdDoc.MainDocumentPart.HeaderParts
    For Each currentText In headerPart.RootElement.Descendants(Of DocumentFormat.OpenXml.Wordprocessing.Text)()

      If (currentText.Text.Contains("$doc-description$")) Then
        Console.WriteLine("found")
        currentText.Text = currentText.Text.Replace("$doc-description$", "replaced-text")
      End If

    Next
  Next

End Using
于 2013-09-25T18:03:26.047 回答
0

感谢您的回复实际上有效:) 我还尝试了以下代码:

    对于 mainDoc.Descendants(Of DocumentFormat.OpenXml.Wordprocessing.HeaderReference)() 中的每个 headref
    headerRelationshipId = headref.Id.Value
    headerType = headref.Type.Value.ToString()
    暗淡 header01 作为 DocumentFormat.OpenXml.Wordprocessing.Header = DirectCast(wdDoc.MainDocumentPart.GetPartById(headerRelationshipId), HeaderPart).Header
    将 headerText 调暗为新 StringBuilder()

    对于每个 text00 作为 DocumentFormat.OpenXml.Wordprocessing.Text 在 header01.Descendants(Of DocumentFormat.OpenXml.Wordprocessing.Text)()
        如果 (text00.Text.Contains("")) 那么
            text00.Text = text00.Text.Replace("", "替换文本")
        万一
    下一个
下一个

但是,如果我想更改表格中的文本(而不是段落)?

于 2013-09-26T10:35:23.060 回答