次の問題があります。
あるワープロ ドキュメントから別のワープロ ドキュメントにテキストをコピーする必要があります。訳文部分にテキストを挿入するときに、常に原文文書にアクセスできるとは限りません。テキストはシリアル化され、後で取得されます。
私が現在これを行う方法は、段落要素をコピーしてから、それらを他のドキュメントに追加することです。弾丸が関係しない限り、これはうまく機能します。 箇条書きは、ソース ドキュメントからターゲット ドキュメントにコピーされません。
コード例を次に示します。
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 をどのように知ることができるでしょうか。