IronWordでのSaveAs後にヘッダーが消える
SaveAs()を標準の保存呼び出しとして使用しており、ヘッダーの損失は報告されていません。 これは確認された製品の欠陥ではなく、環境固有の癖の可能性があるものとして扱い、以下の回避策を適用する前にご自身の環境で検証してください。一部の環境では、IronWordでDOCXテンプレートを埋め込み、SaveAs()で結果を書き出すと、プレースホルダーが正しく統合されているにもかかわらず、生成されたファイルからテンプレートのヘッダーが消えることが観察されています。
Header (e.g. "City Attorney Cover Sheet") is visible in the original DOCX
but missing in the generated file after calling SaveAs().

この挙動が観察された環境では、ドキュメントをSaveAs()ではなくSave()で書き出すとヘッダーが保持されました。 これは他の環境やIronWordの変更履歴では裏付けられていません。他のIronWordガイドはSaveAs()を標準の保存呼び出しとして使用してもヘッダー損失の問題は起きていないため、確認された製品の欠陥ではなく環境固有のものとして扱ってください。
解決策
1. テンプレートを読み込む
ソースDOCXをWordDocumentで開きます。
using IronWord;
using System.Collections.Generic;
var templatePath = @"C:\Templates\CityAttorneyCoverSheetTemplate.docx";
var outputPath = @"C:\Output\merged.docx";
var doc = new WordDocument(templatePath);
using IronWord;
using System.Collections.Generic;
var templatePath = @"C:\Templates\CityAttorneyCoverSheetTemplate.docx";
var outputPath = @"C:\Output\merged.docx";
var doc = new WordDocument(templatePath);
Imports IronWord
Imports System.Collections.Generic
Dim templatePath As String = "C:\Templates\CityAttorneyCoverSheetTemplate.docx"
Dim outputPath As String = "C:\Output\merged.docx"
Dim doc As New WordDocument(templatePath)
2. プレースホルダーを置換
テンプレート置き換えの推奨方法であるdoc.Textsで値をマージします。
var replacements = new Dictionary<string, string>
{
["{CaseNumber}"] = "2026-CR-12345",
["{DefendantName}"] = "John Doe",
["{DefendantAge}"] = "34",
["{DefendantAttorney}"] = "Jane Smith",
};
foreach (var kv in replacements)
{
doc.Texts.ForEach(t => t.Replace(kv.Key, kv.Value));
}
var replacements = new Dictionary<string, string>
{
["{CaseNumber}"] = "2026-CR-12345",
["{DefendantName}"] = "John Doe",
["{DefendantAge}"] = "34",
["{DefendantAttorney}"] = "Jane Smith",
};
foreach (var kv in replacements)
{
doc.Texts.ForEach(t => t.Replace(kv.Key, kv.Value));
}
Imports System.Collections.Generic
Dim replacements As New Dictionary(Of String, String) From {
{"{CaseNumber}", "2026-CR-12345"},
{"{DefendantName}", "John Doe"},
{"{DefendantAge}", "34"},
{"{DefendantAttorney}", "Jane Smith"}
}
For Each kv In replacements
doc.Texts.ForEach(Sub(t) t.Replace(kv.Key, kv.Value))
Next
doc.Textsを介して各エントリを反復処理すると、ドキュメント本文全体で各プレースホルダートークンがマージ値に置き換えられます。
3. SaveAs()ではなく、Save()で保存
この問題が観察された環境では、出力をdoc.Save(outputPath)で書き出すとヘッダーが保持され、doc.SaveAs(outputPath)では失われました。 これは試してみる回避策として扱い、2つのメソッド間で確認された普遍的な動作の違いとしては扱わないでください。
doc.Save(outputPath);
doc.Save(outputPath);
doc.Save(outputPath)

注釈
- ワークフローが
SaveAs()を必要とする場合: 最新のIronWordバージョンで、お使いの環境でヘッダーがどうなるか確認してください。 - 問題が再発する場合: この挙動が調査されている間、一時的な緩和策として以前の動作するバージョンに固定します。

