TL; DR XAML ItemTemplatesのような.NETでWord文書を生成できますか?
すべての要件を満たすソリューションを思い付くのはかなり難しいと感じているので、誰かが私を導いてくれることを期待して、これをstackoverflowに捨てると思いました。よろしくお願いします。
簡単に言えば、データベースのデータに基づいてWord文書を生成する必要があります。
私の理想的な解決策:DataTemplatesがxamlでどのように機能するかのように機能させたい。テンプレートが静的ドキュメントを表し、(単一の)動的コンテンツのビットを置き換える必要がある例とソリューションの山を見つけました。
重要なのは、階層の各レベルにテンプレートを指定できるソリューションが必要であり、ドキュメントジェネレーターはこれらのアイテムレベルのテンプレートを使用して、ドキュメントレベルのテンプレートに基づいて最終的なドキュメントを作成します。
私の特定の要件は次のとおりです。
- できれば.NETソリューション
- サーバーにオフィスを設置する必要はありません
- ユーザーが自由に(もちろん境界内で)変更できるドキュメントの「ビュー」を純粋にカプセル化するテンプレートが存在します(必ずしもWordテンプレートである必要はありません)。ユーザーはWordテンプレートを直接変更するだけでプレゼンテーションを制御する必要があるため、これは非常に重要です。
- できれば、データ階層の各レベルに、付随するテンプレートがあります。
- ヘッダーとフッター
- 目次
データ階層が次のようになっているとしましょう
class Country
{
public string Name { get; set; }
public IList<City> { get; set; }
}
class City
{
public string Name { get; set; }
public IList<Suburb> { get; set;}
}
class Suburb
{
public string Name { get; set; }
public int Postcode { get; set; }
}
私の考えでは、解決策は国のリストを受け入れる関数呼び出しになります。
// returns path to generated document
public static string GenerateDocument(IList<Country> countries);
この関数は、国のリストを受け入れ、国ごとに
- 国のデータを表示するには、国用に準備されたテンプレートを使用します。
- 国の都市ごとに、都市用に準備されたテンプレートを使用して、国のテンプレート内に都市データを表示します
- 都市の郊外ごとに、郊外用に準備されたテンプレートを使用して、都市テンプレート内の郊外データを表示します。
最後に、これらの生成されたドキュメントの「ピース」は、タイトルページ、ヘッダー/フッター、目次を指定するドキュメントレベルのテンプレートを使用して、1つの最終的なWordドキュメントに蓄積されます。