C#:简单实现动态数据生成Word文档并保存
今天正好有人问我,怎么生成一个报表式的Word文档。
就是文字的样式和位置相对固定不变,只是里面的内容从数据中读取。
我觉得类似这种的一般用第三方报表来做比较简便。但既然要求了Word,只好硬着头皮来。
网上的方法大多数都是从一个GridView或表中获得数据后向Word中添加一个表格。
但不方便实现下面的效果(图1)。(以下插图可能需要CSDN用户登录后才能看到)
(图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、在工程的窗体的类中添加引用的命名空间
- using Word;
7、为了省事,直接在窗体的Load事件中加入以下代码。
- //**********************************************
- //来自博客http://blog.csdn.net/fujie724
- //**********************************************
- object oMissing = System.Reflection.Missing.Value;
- //创建一个Word应用程序实例
- Word._Application oWord= new Word.Application();
- //设置为不可见
- oWord.Visible = false;
- //模板文件地址,这里假设在X盘根目录
- object oTemplate = "X://template.dot";
- //以模板为基础生成文档
- Word._Document oDoc = oWord.Documents.Add(ref oTemplate, ref oMissing, ref oMissing, ref oMissing);
- //声明书签数组
- object[] oBookMark = new object[5];
- //赋值书签名
- oBookMark[0] = "beizhu";
- oBookMark[1] = "name";
- oBookMark[2] = "sex";
- oBookMark[3] = "birthday";
- oBookMark[4] = "hometown";
- //赋值任意数据到书签的位置
- oDoc.Bookmarks.get_Item(ref oBookMark[0]).Range.Text = "使用模板实现Word生成";
- oDoc.Bookmarks.get_Item(ref oBookMark[1]).Range.Text = "李四";
- oDoc.Bookmarks.get_Item(ref oBookMark[2]).Range.Text = "女";
- oDoc.Bookmarks.get_Item(ref oBookMark[3]).Range.Text = "1987.06.07";
- oDoc.Bookmarks.get_Item(ref oBookMark[4]).Range.Text = "贺州";
- //弹出保存文件对话框,保存生成的Word
- SaveFileDialog sfd = new SaveFileDialog();
- sfd.Filter = "Word Document(*.doc)|*.doc";
- sfd.DefaultExt = "Word Document(*.doc)|*.doc";
- if (sfd.ShowDialog() == DialogResult.OK)
- {
- object filename = sfd.FileName;
- oDoc.SaveAs(ref filename, ref oMissing, ref oMissing, ref oMissing,
- ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
- ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
- ref oMissing, ref oMissing);
- oDoc.Close(ref oMissing, ref oMissing, ref oMissing);
- //关闭word
- oWord.Quit(ref oMissing, ref oMissing, ref oMissing);
- }
8、运行后直接弹出保存文件对话框(因为写在了Load事件里)。保存为Doc文档,打开发现效果如下(图5)
(图5)
至此,大功告成,文档中的内容正是我们所设定的。一个简单而又快捷的固定格式Word文档输出就完成了。
希望对需要的朋友有帮助。
以上完整教程为个人劳动成果,转载请注明出处。谢谢。
posted on 2012-04-09 11:21 刺客mrchenzh 阅读(668) 评论(0) 编辑 收藏 举报