我有以下问题:
需要将文本从 1 个文字处理文档复制到另一个文字处理文档。在目标部分中插入文本时,源文档并不总是可访问的。文本被序列化并稍后检索。
我目前这样做的方法是复制段落元素,然后将它们附加到另一个文档中。除非涉及子弹,否则这很好用。 项目符号不会从源文档复制到目标文档。
这是一些示例代码:
Public Sub SerializeParagraphsBetweenBookmark(ByVal stream As Stream)
Dim wordDoc = WordprocessingDocument.Open(_fileLocation, True)
Dim paragraphsFromBookmarks As IEnumerable(Of Paragraph)
Using (wordDoc)
paragraphsFromBookmarks = GetAllParagraphFromBookmarks(wordDoc)
End Using
SerializeParagraphsToFile(paragraphsFromBookmarks, stream)
End Sub
Private Sub SerializeParagraphsToFile(ByVal paragraphsFromBookmarks As IEnumerable(Of Paragraph), stream As Stream)
' the IEnumerable of paragraphs must be converted to an IEnumerable of strings before it can be converted
Dim serializableIEnumerable = paragraphsFromBookmarks.Select(Function(x) x.OuterXml).ToList()
Dim binSerializer As New BinaryFormatter()
binSerializer.Serialize(stream, serializableIEnumerable)
End Sub
然后当我检索它们时,我将它们添加到目标文件中,如下所示:
Public Sub InsertParagraphsInDocument(paragraphs As IEnumerable(Of Paragraph))
Dim wordDoc = WordprocessingDocument.Open(_fileLocation, True)
Using (wordDoc)
Dim rootElement = wordDoc.MainDocumentPart.RootElement
Dim bookmark = rootElement.Descendants(Of BookmarkStart).FirstOrDefault(Function(x) x.Name.Value.Equals(_pasteBookmark))
Dim paragraphsList = paragraphs.ToList()
For i As Integer = paragraphsList.Count - 1 To 0 Step -1
bookmark.Parent.InsertAfterSelf(paragraphsList(i))
Next
End Using
End Sub
代码没什么花哨的,欢迎提出任何改进建议。
我知道项目符号存储在 MainDocument 部分的NumberingDefinitionsPart中,但我的问题是我如何知道要在此 NumberingDefinitionsPart 中插入哪个 AbstractNum 和 NumberingInstance?