0

我有以下问题:

需要将文本从 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?

4

1 回答 1

0

我自己找到了答案,看来我必须在两个文件之间同步编号定义部分。

我写了一个工具,所以如果有人感兴趣,请查看:http ://www.lucbos.net/2011/11/wordprocessing-serialization-move.html

于 2011-11-14T11:03:16.247 回答