C#简单实现动态数据生成Word文档并保存

今天正好有人问我,怎么生成一个报表式的Word文档。

就是文字的样式和位置相对固定不变,只是里面的内容从数据中读取。

我觉得类似这种的一般用第三方报表来做比较简便。但既然要求了Word,只好硬着头皮来。

网上的方法大多数都是从一个GridView或表中获得数据后向Word中添加一个表格。

(图1)

我们使用Word模板来实现,方法如下:

1、首先需要向工程中的“引用”加入Word类库的引用(图2)。我是Office 2003。其他版本可能略有不同。在COM里面

(图2)

2、用Word设计一个模板文档(后缀名*.dot)。(图3)

(图3)

3、向模板中的需要显示动态内容的地方添加书签。具体方法是。光标落到欲插入内容的地方,选择菜单栏上的“插入”——〉“书签”(图4)

(图4)在“备注:”的后面添加一个书签,名字叫"beizhu"。书签名字不能以数字开头。

4、完成全部书签的添加,依次应该是:

位置 书签名
备注右侧 beizhu
姓名右侧单元格 name
性别右侧单元格 sex
生日右侧单元格 birthday
籍贯右侧单元格 hometown

5、保存这个已完成的模板到任意路径,例如 X:/template.dot

6、在工程的窗体的类中添加引用的命名空间

7、为了省事,直接在窗体的Load事件中加入以下代码。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Windows.Forms;
 9 using Microsoft.Office.Interop.Word;
10
11 namespace 生成word文档
12 {
13     public partial class Form1 : Form
14     {
15         public Form1()
16         {
17             InitializeComponent();
18             Load += Form1_Load;
19         }
20
21         void Form1_Load(object sender, EventArgs e)
22         {
23             //**********************************************
24             //来自博客http://blog.csdn.net/fujie724
25             //**********************************************
26             object oMissing = System.Reflection.Missing.Value;
27             //创建一个Word应用程序实例
28             Microsoft.Office.Interop.Word._Application oWord = new Microsoft.Office.Interop.Word.Application();
29             //设置为不可见
30             oWord.Visible = false;
31             //模板文件地址,这里假设在X盘根目录
32             object oTemplate = "d://template.dotx";
33             //以模板为基础生成文档
34             Microsoft.Office.Interop.Word._Document oDoc = oWord.Documents.Add(ref oTemplate, ref oMissing, ref oMissing, ref oMissing);
35             //声明书签数组
36             object[] oBookMark = new object[5];
37             //赋值书签名
38             oBookMark[0] = "beizhu";
39             oBookMark[1] = "name";
40             oBookMark[2] = "sex";
41             oBookMark[3] = "birthday";
42             oBookMark[4] = "hometown";
43             //赋值任意数据到书签的位置
44             oDoc.Bookmarks.get_Item(ref oBookMark[0]).Range.Text = "使用模板实现Word生成";
45             oDoc.Bookmarks.get_Item(ref oBookMark[1]).Range.Text = "李四";
46             oDoc.Bookmarks.get_Item(ref oBookMark[2]).Range.Text = "女";
47             oDoc.Bookmarks.get_Item(ref oBookMark[3]).Range.Text = "1987.06.07";
48             oDoc.Bookmarks.get_Item(ref oBookMark[4]).Range.Text = "贺州";
49             //弹出保存文件对话框,保存生成的Word
50             SaveFileDialog sfd = new SaveFileDialog();
51             sfd.Filter = "Word Document(*.doc)|*.doc";
52             sfd.DefaultExt = "Word Document(*.doc)|*.doc";
53             if (sfd.ShowDialog() == DialogResult.OK)
54             {
55                 object filename = sfd.FileName;
56
57                 oDoc.SaveAs(ref filename, ref oMissing, ref oMissing, ref oMissing,
58                 ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
59                 ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
60                 ref oMissing, ref oMissing);
61                 oDoc.Close(ref oMissing, ref oMissing, ref oMissing);
62                 //关闭word
63                 oWord.Quit(ref oMissing, ref oMissing, ref oMissing);
64             }
65         }
66     }
67 }

8、运行后直接弹出保存文件对话框(因为写在了Load事件里)。保存为Doc文档,打开发现效果如下(图5)

(图5)

至此,大功告成,文档中的内容正是我们所设定的。一个简单而又快捷的固定格式Word文档输出就完成了。

希望对需要的朋友有帮助。

以上完整教程为个人劳动成果,转载请注明出处。谢谢。

时间: 2024-12-25 05:34:23

C#简单实现动态数据生成Word文档并保存的相关文章

动态数据生成Word文档

最近做项目,让做一个将页面上的数据按照固定的格式保存到一个Word中,记得当初在考试系统的时候,我们的那个系统也实现了这个功能,那个时候知识觉得,哇喔,好神奇啊,那个一个杂乱无章的页面,都可以让他显示的很有层次,如果像Excel中那个,行是行,列是列的,还好控制一点.好难,他们好牛! 可以今天轮到自己做这个东西了,哎,这个后悔,当初多问一句,为什么,这个是怎么做的,稍微说一句,今天好赖看看不就可以了.出来混早晚是要还的!弄的今天做的时候,都不知道如何查资料.最后只能从"Word"查起.

C# 在根据窗体中的表格数据生成word文档时出错

出错内容为:   有关调用实时(JIT)调试而不是此对话框的详细信息, 请参见此消息的结尾. ************** 异常文本 ************** System.BadImageFormatException: 未能加载文件或程序集“Interop.Word, Version=8.1.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项.试图加载格式不正确的程序. 文件名:“Interop.Word, Version=8.1.0.

用Aspose.Words for .NET动态生成word文档中的数据表格

1.概述 最近项目中有一个这样的需求:导出word 文档,要求这个文档的格式不是固定的,用户可以随便的调整,导出内容中的数据表格列是动态的,例如要求导出姓名和性别,你就要导出这两列的数据,而且这个文档不是导出来之后再调整而是导出来后已经是调整过了的.看到这里,您也许马上想到用模板导出!而且.NET中自带有这个组件:Microsoft.Office.Interop.Word,暂且可以满足需求吧.但这个组件也是有局限性的,例如客户端必须装 office组件,而且编码复杂度高.最麻烦的需求是后面那个-

C#动态生成Word文档并填充数据

C#也能动态生成Word文档并填充数据 http://www.cnblogs.com/qyfan82/archive/2007/09/14/893293.html 引用http://blog.csdn.net/mengyao/archive/2007/09/13/1784079.aspx using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.

POI加dom4j将数据库的数据按一定格式生成word文档

一:需求:将从数据库查处来的数据,生成word文档,并有固定的格式.(dom4j的jar包+poi的jar包) 二:解决:(1)先建立固定格式的word文档(2007版本以上),另存成为xml文件,作为模板.(修改xml节点,添加属性,用于标示要填固定数据的节点) (2)dom4j解析模板xml文件,将文件读入内存,并把数据库数据写入内存的xml模型中 (3)利用poi将内存中的含有数据库内容的xml模型转换成word内存模型,利用输出流输出word文档 三:DEMO [1]模板的word文档

从数据库中取出数据,使用freemarker生成word文档

这个星期做数据字典功能,有一项任务就是将数据库中的每个表的字段导出,生成word文档,在综合比较网上各种技术之后,参照csdn上骆豪的博客完成了任务. 骆昊的链接:http://blog.csdn.net/jackfrued/article/details/39449021 首先打开word文档,建立自己所需要的模板,然后将word保存为XML的格式,这里可能出现的一个问题就是需要填入的内容放上${}占位符的时候可能会出现字符分离的情况,所以建议先将需要用${}占位符的地方用中文写在word里然

通过xml生成word文档

Xml生成word总结 使用xml生成word的基本步骤在<使用xslt转化xml数据形成word文档导出.doc>中说明比较清楚了.但是其中的细节并未说到,因此自己折腾了两天总算成功了.以下是我在使用过程中碰到的问题要点: 必须使用word 2003. 1.下面通过例子演示: 简单 的xml以及对应的xml框架 2.分别创建03版本的word文档log_03.doc和o7版本的word文档log_07.docx,并都应用以上生成的log.xsd框架 分别另存为log_03_doc.xml,l

Java Web项目中使用Freemarker生成Word文档

Web项目中生成Word文档的操作屡见不鲜,基于Java的解决方案也是很多的,包括使用Jacob.Apache POI.Java2Word.iText等各种方式,其实在从Office 2003开始,就可以将Office文档转换成XML文件,这样只要将需要填入的内容放上${}占位符,就可以使用像Freemarker这样的模板引擎将出现占位符的地方替换成真实数据,这种方式较之其他的方案要更为简单. 下面举一个简单的例子,比如在Web页面中填写个人简历,然后点击保存下载到本地,效果图如下所示. 打开下

java使用freemarker 生成word文档

java 生成word文档 最近需要做一个导出word的功能, 在网上搜了下, 有用POI,JXL,iText等jar生成一个word文件然后将数据写到该文件中,API非常繁琐而且拼出来的样式也不美观,于是选择了另一种方式----feemarker基于word模板的导出方式, 这种方式非常简单而且导出的样式美观, 其原理就是先做一个word模板, 该模板中变量数据用${xxx}这种方式填写, 然后再导出时只需读取模板然后用相应的数据替换其中的${xxx}即可. 一,简单模板导出(不含图片, 不含