MS OpenXml Sdkを使用して、テンプレートストリームを結果ストリームにコピーし、次のコードを使用して本文の最後に動的テキスト(wp >> wr >> wt)を追加することができました。
var templateStream = File.OpenRead(templatePath);
templateStream.CopyTo(resultStream);
using (var resultPackage = WordprocessingDocument.Open(resultStream, true))
{
var document = resultPackage.MainDocumentPart.Document;
var body = document.Body;
// Add new text.
var para = body.AppendChild(new Paragraph());
var run = para.AppendChild(new Run());
run.AppendChild(new Text(firstName));
document.Save();
}
次の論理的な手順は、以下のコードのように、resultStreamのテキストボックスの内部テキストをfirstNameに置き換えることでした。
// replacing code in using statement from above
var document = resultPackage.MainDocumentPart.Document;
var textbox = document.Descendants<TextBox>().First();
const string firstNametag = "<<IH.FirstName>>";
if (textbox.InnerText.Contains(firstNametag))
{
var textboxContent = textbox.Elements<TextBoxContent>().First();
textboxContent.RemoveAllChildren();
var paragraph = textboxContent.AppendChild(new Paragraph());
var run = paragraph.AppendChild(new Run());
run.AppendChild(new Text(firstName));
}
document.Save();
最初の例では、いくつかの追加コードを使用して、結果ストリームがdocxに適切にシリアル化され、Wordで表示したときにfirstNameが本文の末尾に追加されます。2番目の例では、デバッガーでさらに調べたところ、textboxContentの子が上記の変更を反映していることが示されていても、テキストボックスとその内容は同じままです。
私はOpenXML開発に不慣れなので、明らかなことがあれば指摘してください。