6

我们有一个数据库应用程序,用于存储我们想要在 Microsoft Word 中报告的数据。

假设我的客户的所有信息都存储在数据库系统中,现在我被要求创建数百个单词的字母,报告将发送给我的客户。这些信件内容相同,但客户名称、客户地址等不同。

我想通过使用 c# 和 .Net、sql 作为数据库创建带有内容控件的文档模板来替换此模板的内容,从而利用 Office Word 2010。

我一直在寻找有关在 C# 和 dot net 和 sql 中自动化 Word 2010 的文章。有人可以推动我朝着正确的方向前进吗?

4

8 回答 8

1

所以对于开始不要使用互操作,我在过去 4 年里一直在使用它,我必须告诉你这不是一个好主意(它真的丢失了,你会遇到很多问题。它实际上是写在微软的您不应该将其用于服务器端生成的站点。

您应该使用 OpenXML SDK,我实际上刚刚开始使用它,但我不得不说,即使它看起来有点难使用,使用 interop 肯定要快得多,最好的事情是知道我不知道需要在我的电脑上安装Office 套件中的任何程序,缺点是如果没有 3rd 方库,我将无法再导出为 PDF 或 XPS

你可以在这里找到 sdk http://www.microsoft.com/en-us/download/details.aspx?id=30425

我建议也下载该工具,它非常有用。

这是一个很好的教程,它确实对我帮助很大。

http://msdn.microsoft.com/en-us/library/office/bb448854.aspx

您还可以使用与 sdk 位于同一站点的 Productivity Tool 中的 API 文档

于 2013-01-25T13:28:13.703 回答
1

您的答案是 OpenXML SDK。

  1. 转到适用于 Microsoft Office 的 Open XML SDK 2.5
  2. 下载 OpenXMLSDKV25 和 OpenXMLSDKToolV25
  3. 安装 sdk 和生产力工具
  4. 打开 word 并创建您的模板文档
  5. 打开 Open XML SDK 生产力工具
  6. 打开word文档
  7. 右键单击文档资源管理器中的文档名称并选择反映代码
  8. 将所有生成的代码复制到您的项目中
  9. 查找并编辑要替换为数据的“段落”或“运行”
于 2013-01-28T08:59:35.547 回答
1

我过去曾使用 Office.Interop 程序集来实现这种功能,但这种方法有一些明显的缺点:

  • Word 必须安装在运行代码的机器上
  • Interop 程序集实际上在后台启动 Word,因此您必须小心正确处理所有内容并处理错误,否则您最终会导致 Word 进程在主机服务器上浪费 CPU/内存
  • API 使用起来不是很愉快,并且文档有些稀缺

我也玩过DocXOpen XML,它们都有其优点,但与 Interop 相比往往会受到轻微限制。我的建议是尝试使用 DocX 或 Open XML 的功能,只有在无法以任何其他方式实现功能时才回退到 Interop。这三个 API 应该有大量的在线教程。

于 2013-01-21T16:29:21.923 回答
1

Microsoft 建议将 OpenXml 用于在服务器进程中运行的任何应用程序,这种方法可能是减少依赖关系的最佳方法之一(正如其他人所提到的)。以下是一些帮助您入门的链接:

下载 OpenXml SDK 2.0:http ://www.microsoft.com/en-au/download/details.aspx?id=5124

有用的教程:http: //msdn.microsoft.com/en-us/library/ff478255.aspx

于 2013-01-25T03:21:37.453 回答
1

出于同样的原因,我同意其他人的观点,即 OpenXML SDK 是一个很好的方法。我正在创建与您类似的报告生成方式。不幸的是,我需要生成的报告不仅在数据方面而且在布局方面都非常动态。

如果您的布局不需要更改,那么我强烈建议您使用 SDK 工具,它可以让您获取任何 word 文档并生成 c# 代码,以便您重新创建完全相同的文档。从那时起,您所要做的就是用代码中所需的数据替换文本。您可以用 word 制作通用报告,使用该工具获取代码,然后只需搜索代码中的占位符文本并将该字符串替换为变量。它就像 text1.text = reportData 一样简单;

我还发现 SDK 工具是学习代码的好方法,您可以并排比较两个文件,看看它们在代码中有何不同。

于 2013-01-25T13:50:50.460 回答
1

您可以在您的程序中使用 Interop.Word,但请记住,可用的文档非常稀缺。我设法开发了我的应用程序,查看了来自 C-SharpCorner 的示例来自 WindowsDevCenter的示例。即使示例很旧,您也可以了解主要思想并熟悉语法,然后使用更新版本的 Interop.Word(语法稍微简单一些)编写您的程序。

在您的情况下,您应该创建一个简洁的 Word 模板,书签位于您将插入客户信息的文档位置。然后,您可以从程序中打开模板并使用这些书签进行导航,同时插入从数据库中检索到的信息。

如果您不想深入了解 Word 自动化,可以尝试 Interop.Word 的其他有趣替代方案,例如DocX(甚至不需要安装 Microsoft Word 或 Office)或Open XML(以生成 .docx 文件)。

于 2013-01-21T11:12:13.720 回答
0

我使用了 interop 和 syncfusion 来创建报告(虽然我正在生成一个 excel 报告,但是这两种技术也可以用来生成 word 报告)。我的反馈 :-

  1. 虽然 interop 包含在大多数具有 Visual Studio 的计算机中(不确定非 Visual Studio 计算机),但使用 interop 需要在生成报告的计算机上也存在兼容的 microsoft excel,而 syncfusion 不需要在生成报告的计算机上存在 microsoft excel同一台电脑。
  2. 如果您打算使用 asp.net,则不支持互操作(至少在我工作时不支持),而支持同步融合。

同步融合链接:- http://www.syncfusion.com/products/aspnet/docio

摘要:- 如果您正在开发控制台应用程序并且服务器(将部署该应用程序)安装了 microsoft office,那么互操作可能是一个好主意。否则,您也可以查看同步融合。

于 2013-01-23T17:31:54.720 回答
0

您可以使用免费的.NET Word API使用 c# 生成 word 97 ~ 2010 的报告。

        //Create word document
        Document document = new Document();
        document.LoadFromFile(@"..\..\..\..\..\..\Data\Fax.doc");

        string[] filedNames = new string[]{"Contact Name","Fax","Date"};

        string[] filedValues = new string[]{"John Smith","+1 (69) 123456",System.DateTime.Now.Date.ToString()};

        document.MailMerge.Execute(filedNames, filedValues);

        //Save doc file.
        document.SaveToFile("Sample.doc", FileFormat.Doc);
于 2014-04-11T07:55:27.227 回答