如何在C#中创建Word文档?
我有一个项目,我想以MS Word格式生成报告导出。该报告将包括图像/图形,表格和文本。做这个的最好方式是什么?第三方工具?你有什么经验?
解决方案
回答
答案将在一定程度上取决于应用程序是在服务器上运行还是在客户端计算机上运行。如果我们在服务器上运行,那么我们将要使用一种基于XML的Office生成格式,因为在服务器上使用Office Automation时存在一些已知问题。
但是,如果我们在客户端计算机上工作,则可以选择使用Office Automation还是使用Office Open XML格式(请参阅下面的链接),Microsoft Office 2000以及更高版本(本身或者通过Service Pack)都支持这种格式。不过,这样做的一个缺点是我们可能无法嵌入想要显示的某些图形或者图像。
处理事情的最佳方法全都取决于我们必须花多少时间在开发上。如果我们走Office Automation的路线,那么有很多不错的教程可以通过Google找到,并且学习起来非常简单。但是,Open Office XML格式是相当新的,因此我们可能会发现学习曲线要高一些。
Office Open XML信息
- Office Open XML-http://en.wikipedia.org/wiki/Office_Open_XML
- OpenXML开发人员-http://openxmldeveloper.org/default.aspx
- Office(2007)开放XML文件格式简介-http://msdn.microsoft.com/zh-cn/library/aa338205.aspx
回答
@Dale Ragan:这将适用于Office 2003 XML格式,但是它不是可移植的(例如,.doc或者.docx文件将是可移植的)。
要读取/写入这些内容,我们需要使用Word对象库ActiveX控件:
http://www.codeproject.com/KB/aspnet/wordapplication.aspx
回答
@Danny Smurf:实际上,本文描述了将成为Rob回答的Office Open XML格式。我将更加关注我现在发布的链接,以确保这些链接不会过时。我实际上在WordML上进行了搜索,这在当时被称为。
我相信Office Open XML格式是最好的选择。
回答
Schmidty,如果我们想在Web服务器上生成Word文档,则将需要每个客户端(而不仅仅是Web服务器)的许可证。请参阅Rob发布的第一个链接中的本节:
"除了技术问题之外,我们还必须考虑许可问题。当前的许可准则禁止在服务器上使用Office应用程序来满足客户端请求,除非这些客户端本身已获得Office的许可副本。使用服务器端自动化来提供Office功能来最终用户许可协议(EULA)不涵盖未经许可的工作站。"
如果满足许可要求,我认为我们将需要使用COM Interop,即Office XP Primary Interop程序集。
回答
我们是否考虑过使用.RTF作为替代方案?
它支持嵌入图像,表格和文本,默认情况下使用Microsoft Word打开,而它的功能集对外观和感觉的限制更大(不包括任何高级格式),就像Word文档一样打开不远。
最终用户可能不会注意到。
回答
我发现Aspose Words是最好的,因为不是每个人都可以打开Office Open XML / *。docx格式的文件,并且Word互操作和Word自动化可能会出错。 Aspose Words支持Word 97以上的大多数文档文件类型。
它是付费组件,但有强大的支持。如已经建议的另一种替代方法是RTF。
回答
签出VSTO(用于Office的Visual Studio工具)。创建Word模板,将xml数据岛注入其中,然后将其发送给客户端是相当简单的。当用户在Word中打开文档时,Word会读取xml并将其转换为WordML并进行呈现。我们将要查看VSTO库的ServerDocument类。根据我的经验,不需要额外的许可。
回答
我目前正在做这件事。
如果文档不是很大,不包含图像等,那么我将其与#MergeFields一起存储为RTF,然后将其替换为内容,然后将结果作为RTF发送给用户。
对于较大的文档,包括图像和动态插入的图像,我将初始Word文档另存为包含#MergeFields的单个网页* .mht文件。然后,我做与上述相同的操作。使用此功能,我可以轻松地使用一些基本的HTML表格标签呈现DataTable,并用整个表格替换#MergeFields之一。
图像可以存储在服务器上,URL也可以嵌入文档中。
有趣的是,新的Office 2007文件格式实际上是zip文件,如果将扩展名重命名为.zip,则可以打开它们并查看其内容。这意味着我们应该能够使用一个简单的Czip库来切换内容,例如图像。
回答
我遇到了这个问题,并为此创建了一个小库。它被用于多个项目,然后我决定发布它。它是免费的,而且非常简单,但是我相信它将对任务有所帮助。调用Office Open XML库http://invoke.co.nz/products/docx.aspx。
回答
我使用支持doc和docx格式的Syncfusion Backoffice DocIO取得了成功。
在以前的版本中,它不支持所有文字功能,但是根据列表,我们使用表和文本作为邮件合并方法对其进行了测试,并且效果很好。
虽然不确定图像的导入。在他们的简介页面http://www.syncfusion.com/products/DocIO/Backoffice/features/default.aspx上说
Blockquote Essential DocIO has support for inserting both Scalar and Vector images into the document, in almost all formats. Bitmap, gif, png and tiff are some of the common image types supported.
因此值得考虑。
正如其他人提到的,我们可以建立一个RTF文档,.net周围有一些不错的RTF库,例如http://www.codeproject.com/KB/string/nrtftree.aspx
回答
我花了大约一周的时间来了解Office Open XML的最新知识。我们有一个数据库应用程序,用于存储要在Microsoft Word中报告的调查数据。我们实际上可以在C#中从头开始创建Word 2007(docx)文件。 Open XML SDK版本2包含一个称为Document Reflector的出色应用程序,该应用程序实际上将提供Ccode来完全重新创建Word文档。我们可以使用部分或者全部代码,并替换要动态更改的位。 SDK随附的帮助文件也包含一些良好的代码示例。
服务器上不需要Office Interop或者任何其他Office软件,新格式为100%XML。
回答
要在.NET(特别是在Cor VB.NET)中使用Office Automation生成Word文档,请执行以下操作:
- 将Microsoft.Office.Interop.Word程序集引用添加到项目。路径是\ Visual Studio Tools for Office \ PIA \ Office11 \ Microsoft.Office.Interop.Word.dll。
- 遵循Microsoft代码示例,我们可以在这里找到:http://support.microsoft.com/kb/316384/en-us。
回答
DocX免费库,用于创建DocX文档,它是积极开发的,并且非常易于使用。由于CodePlex快死了,因此项目已移至github。