IronWordでのSaveAs後にヘッダーが消える

This article was translated from English: Does it need improvement?
Translated
View the article in English

ご注意この挙動は1つの環境でのみ報告されており、IronWordの変更履歴では裏付けられていません。他のIronWordガイドは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().

置き換えられていないプレースホルダーとヘッダーがないWordテンプレート

この挙動が観察された環境では、ドキュメントを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)
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

doc.Textsを介して各エントリを反復処理すると、ドキュメント本文全体で各プレースホルダートークンがマージ値に置き換えられます。

3. SaveAs()ではなく、Save()で保存

この問題が観察された環境では、出力をdoc.Save(outputPath)で書き出すとヘッダーが保持され、doc.SaveAs(outputPath)では失われました。 これは試してみる回避策として扱い、2つのメソッド間で確認された普遍的な動作の違いとしては扱わないでください。

doc.Save(outputPath);
doc.Save(outputPath);
doc.Save(outputPath)
$vbLabelText   $csharpLabel

ヘッダーが保持され、プレースホルダーが埋め込まれたWord文書

注釈

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

ご注意プレースホルダーはヘッダーが失われた場合でもトラバース中に見つかり置換されるので、成功したマージだけではヘッダーが保持されたことの確認にはなりません。 出力を開いて確認してください。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。

準備はできましたか?
Nuget ダウンロード 48,355 | バージョン: 2026.7 リリースされたばかり
Still Scrolling Icon

まだスクロールしていますか?

すぐに証拠が欲しいですか? PM > Install-Package IronWord
サンプルを実行する あなたのデータが Word ドキュメントになるのを見る。