如何在C#中创建Word文档?

74

我有一个项目,希望生成一个MS Word格式的报告导出。该报告将包括图片/图表、表格和文本。最好的方法是什么?需要使用第三方工具吗?你有什么经验?


5
这个应该重新开放。它不仅清晰有用,而且与其他被标记为重复的问题相互关联。 - DarenW
17个回答

3

请查看VSTO(Visual Studio Tools for Office)。 创建Word模板,注入xml数据岛并将其发送到客户端非常简单。 当用户在Word中打开文档时,Word会读取xml并将其转换为WordML并呈现它。 您需要查看VSTO库的ServerDocument类。 根据我的经验,不需要额外的许可证。


2

我目前正在做这个。如果文档不是很大,不包含图片等内容,那么我会将其存储为带有#MergeFields#的RTF,并简单地用内容替换它们,将结果作为RTF发送给用户。

对于较大的文档,包括图像和动态插入的图像,我将初始Word文档保存为一个包含#MergeFields#的Single Webpage *.mht文件。然后我像上面那样做。使用这种方法,我可以轻松地呈现带有一些基本Html表格标记的DataTable,并将其中一个#MergeFields#替换为整个表格。

图像也可以存储在您的服务器上,并将URL嵌入到文档中。

有趣的是,新的Office 2007文件格式实际上是zip文件——如果您将扩展名改为.zip,您可以打开它们并查看其内容。这意味着您应该能够使用简单的C# zip库切换内容,如图像。


1
您还可以使用Word文档生成器。它可用于客户端或服务器端部署。从项目描述中可以看出:
WordDocumentGenerator是一种实用工具,可使用Visual Studio 2010和Open XML 2.0 SDK从模板生成Word文档。WordDocumentGenerator有助于生成基于预定义模板的非刷新和可刷新的Word文档,使用最少的代码更改。内容控件用作文档生成的占位符。它支持Word 2007和Word 2010。
获取它:http://worddocgenerator.codeplex.com/ 下载SDK:http://www.microsoft.com/en-us/download/details.aspx?id=5124

1

1

@Danny Smurf: 实际上,这篇文章描述了即将成为Office Open XML格式的内容,Rob已经回答了这个问题。我现在会更加注意我发布的链接,以确保它们不过时。当时我实际上是搜索了WordML。

我相信Office Open XML格式是最好的选择。


1

LibreOffice 也支持通过 API 进行无界面交互。不幸的是,目前还没有关于这个功能的太多信息.. :(


0
另一个选择是Windward Docgen(免责声明 - 我是创始人)。使用Windward,您可以在Word中设计包括图像,表格,图形,量规和任何其他内容的模板。您可以设置标签,在其中插入来自XML或SQL数据源的数据(包括诸如forEach循环,导入等功能)。然后生成报告为DOCX,PDF,HTML等格式。

2
当我访问一个商业产品网站时,如果他们在大力宣传有免费试用期的同时却隐藏了价格,我就会自动认为这个产品真的很贵,而免费试用只是诱饵。如果Docgen非常昂贵,那么你隐藏价格可能是正确的选择,但否则我认为这是一个错误。 - Steve Hiner
@SteveHiner - 我们有价格范围(在价格搜索中查找),但我们撤下了价格列表,因为很大一部分时间人们会误解他们需要什么,然后感到被误导。因此,我们认为更好的方法是了解某人的需求,然后给他们正确的价格。 - David Thielen
1
@SteveHiner - 你是对的。在很多人抱怨后,我们在网站上提高了价格,并试图解释清楚他们会得到什么。 - David Thielen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接