0

次の問題があります。

あるワープロ ドキュメントから別のワープロ ドキュメントにテキストをコピーする必要があります。訳文部分にテキストを挿入するときに、常に原文文書にアクセスできるとは限りません。テキストはシリアル化され、後で取得されます。

私が現在これを行う方法は、段落要素をコピーしてから、それらを他のドキュメントに追加することです。弾丸が関係しない限り、これはうまく機能します。 箇条書きは、ソース ドキュメントからターゲット ドキュメントにコピーされません。

コード例を次に示します。

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

私は自分で答えを見つけました。2つのファイル間で番号付け定義部分を同期する必要があったようです。

私はこれを行うツールを書いたので、誰かが興味を持っているなら、それをチェックしてください:http ://www.lucbos.net/2011/11/wordprocessing-serialization-move.html

于 2011-11-14T11:03:16.247 に答える