TL;DR 我可以使用 .NET 生成 Word 文档(如 XAML ItemTemplates)吗?
我发现很难找到一个满足我所有要求的解决方案,所以我想我会把它扔到 stackoverflow,希望有人能指导我。非常感谢。
简单来说,我需要根据数据库中的数据生成Word文档。
我的理想解决方案:我希望它像 DataTemplates 在 xaml 中的工作方式一样工作。我找到了大量示例和解决方案,其中模板表示静态文档,其中包含一些需要替换的(单个)动态内容。
e.g. Word文档生成器 http://blogs.msdn.com/b/atverma/archive/2011/12/31/utility-to-generate-word-documents-from-templates-using-visual-studio-2010-and-open-xml-2-0-sdk.aspx
问题是,我需要一个解决方案,可以在其中为层次结构的每个级别指定一个模板,并且文档生成器将使用这些项目级别模板来基于文档级别模板构建最终文档。
我的具体要求是:
- 最好是.NET解决方案
- 服务器上无需安装office
- 存在一个模板,它纯粹封装了文档的“视图”(不一定是 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);
此功能将接受国家/地区列表,并且对于每个国家/地区
- 使用为国家准备的模板来呈现国家数据。
- 对于国家/地区的每个城市,使用为城市准备的模板在国家/地区模板中呈现城市数据
- 对于城市中的每个郊区,使用为郊区准备的模板在城市模板中呈现郊区数据。
最后,这些生成的文档“片段”将使用文档级模板累积到一个最终的 Word 文档中,该模板将指定标题页、页眉/页脚、目录。