首页 / 知识

关于.net:如何在C#中创建Word文档?

2023-04-12 04:06:00

关于.net:如何在C#中创建Word文档?

How can a Word document be created in C#?

我有一个项目,我想以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

DocX免费库,用于创建DocX文档,它是积极开发的,并且非常易于使用。由于CodePlex快死了,因此项目已移至github。


我花了大约一周的时间来熟悉Office Open XML。我们有一个数据库应用程序,用于存储要在Microsoft Word中报告的调查数据。您实际上可以在C#中从头开始创建Word 2007(docx)文件。 Open XML SDK版本2包含一个称为Document Reflector的出色应用程序,该应用程序实际上将提供C#代码以完全重新创建Word文档。您可以使用部分或全部代码,并替换要动态更改的位。 SDK随附的帮助文件也包含一些良好的代码示例。

服务器上不需要Office Interop或任何其他Office软件-新格式为100%XML。


您是否考虑过使用.RTF作为替代方案?

它支持嵌入图像,表格和文本,默认情况下使用Microsoft Word打开,而它的功能集对于外观和感觉像Word文档一样有限(不算高级格式),而且距离并不远。

您的最终用户可能不会注意到。


我发现Aspose Words是最好的,因为不是每个人都可以打开Office Open XML / *。docx格式的文件,并且Word互操作和??Word自动化可能会出错。 Aspose Words支持Word 97以上的大多数文档文件类型。

它是付费组件,但有强大的支持。如已经建议的另一种替代方法是RTF。


要在.NET(尤其是C#或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。


  • Schmidty,如果要在Web服务器上生成Word文档,则将需要每个客户端(而不仅仅是Web服务器)的许可证。请参阅Rob发布的第一个链接中的本节:

    "除了技术问题之外,您还必须考虑许可问题。当前的许可准则会阻止在服务器上使用Office应用程序来满足客户端请求,除非这些客户端本身已获得Office的许可副本。使用服务器端自动化来提供Office功能来最终用户许可协议(EULA)不涵盖未经许可的工作站。"

    如果您满足许可要求,我认为您将需要使用COM Interop-具体来说就是Office XP Primary Interop程序集。


    我使用支持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


    签出VSTO(用于Office的Visual Studio工具)。创建Word模板,将xml数据岛注入其中,然后将其发送给客户端是相当简单的。当用户在Word中打开文档时,Word读取xml并将其转换为WordML并进行呈现。您将要查看VSTO库的ServerDocument类。根据我的经验,不需要额外的许可。


    我遇到了这个问题,为此创建了一个小库。它被用于多个项目,然后我决定发布它。它是免费的,而且非常简单,但是我相信它将对您的任务有所帮助。调用Office Open XML库http://invoke.co.nz/products/docx.aspx。


    我写了一篇有关Open XML WordprocessingML文档生成的博客文章系列。我的方法是创建一个包含内容控件的模板文档,并在每个内容控件中编写一个XPath表达式,该表达式定义如何从包含驱动文档生成过程的数据的XML文档中检索内容。该代码是免费的,并根据Microsoft互惠许可证(Ms-RL)获得许可。在同一篇博客文章系列中,我还将探讨一种在内容控件中编写C#代码的方法。然后,文档生成过程处理模板文档,并生成C#程序,该程序生成所需的文档。这种方法的优点之一是,您可以将任何数据源用作文档生成过程的数据源。该代码也获得了Microsoft互惠许可的许可。


    我目前正在做这件事。

    如果文档不是很大,不包含图像等,那么我将其存储为带有#MergeFields#的RTF,然后将其替换为内容,然后将结果作为RTF发送给用户。

    对于较大的文档,包括图像和动态插入的图像,我将初始Word文档另存为包含#MergeFields#的单个网页* .mht文件。然后,我做与上述相同的操作。使用此功能,我可以轻松地使用一些基本的HTML表格标签呈现DataTable,并用整个表格替换#MergeFields#之一。

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

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


    您也可以使用Word文档生成器。它可以用于客户端或服务器端部署。从项目描述:

    WordDocumentGenerator is an utility to generate Word documents from
    templates using Visual Studio 2010 and Open XML 2.0 SDK.
    WordDocumentGenerator helps generate Word documents both
    non-refresh-able as well as refresh-able based on predefined templates
    using minimum code changes. Content controls are used as placeholders
    for document generation. It supports Word 2007 and Word 2010.

    抓住它:http://worddocgenerator.codeplex.com/

    下载SDK:http://www.microsoft.com/zh-cn/download/details.aspx?id=5124


    LibreOffice还通过API支持无头交互。不幸的是,目前关于此功能的信息还很少。


    @Danny Smurf:实际上,本文描述了将成为Rob回答的Office Open XML格式。我将更加关注我现在发布的链接,以确保这些链接不会过时。我实际上是在WordML上进行搜索的,当时它被称为。

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


    @Dale Ragan:这将适用于Office 2003 XML格式,但是它不是可移植的(例如,.doc或.docx文件是可移植的)。

    要读取/写入这些内容,您需要使用Word对象库ActiveX控件:

    http://www.codeproject.com/KB/aspnet/wordapplication.aspx


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


    文档运行报告图形

    最新内容

    相关内容

    热门文章

    推荐文章

    标签云

    猜你喜欢