动态数据生成Word文档

最近做项目,让做一个将页面上的数据按照固定的格式保存到一个Word中,记得当初在考试系统的时候,我们的那个系统也实现了这个功能,那个时候知识觉得,哇喔,好神奇啊,那个一个杂乱无章的页面,都可以让他显示的很有层次,如果像Excel中那个,行是行,列是列的,还好控制一点。好难,他们好牛!

可以今天轮到自己做这个东西了,哎,这个后悔,当初多问一句,为什么,这个是怎么做的,稍微说一句,今天好赖看看不就可以了。出来混早晚是要还的!弄的今天做的时候,都不知道如何查资料。最后只能从“Word”查起。

不过查了查,好像这个东西好像还是挺简单的,其实原理上跟操作Excel是差不多,先根据路径找到对应的文件,然后对该文件进行操作,然后关闭。(这不就是
把大象放冰箱里的步骤 --哈哈)。

好了既然这么简单,就给大家用一个小的例子看看这个东西是怎么个简单法!

这个我们就以一封信为例来进行讲解!

大家先来看一下信的模板,如图所示:

这个封信中有一个字是变的,有些字是不变的!变的字是我们需要动态输入的。而不变的字是我们需要做到模板中的!
模板的制作方式如图所示,(图示为收信人的标签的添加,其他的标签添加是一样的,相信聪明的你肯定是一看就会的)提醒一点,光标的位置一定不要放错位置,否则的就是收信人为写信人,日期为收信人。。。。。

模板建好了,比如说保存在了“D://写信模板//信模板.dotx”,下边就是该写程序了。在程序中,要先添加MICROSOFT.WORD的引用。
然后看一下代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Office.Interop;

namespace word模板
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //System.Reflection.Missing.Value是System.Reflection.Missing类的唯一实例,作为缺省值参数传给word或excel对象的某个函数
            object oMissing = System.Reflection.Missing.Value;
            //创建一个Word应用程序实例
            Microsoft.Office .Interop.Word ._Application oWord = new Microsoft .Office .Interop.Word .Application();
            //设置为不可见
            oWord.Visible = false;
            //模板文件地址,这里假设在X盘根目录
            object oTemplate = "D://写信模板//信模板.dotx";
            //以模板为基础生成文档
            Microsoft.Office.Interop.Word._Document oDoc = oWord.Documents.Add(ref oTemplate, ref oMissing, ref oMissing, ref oMissing);
            //声明书签数组
            object[] oBookMark = new object[4];
            //赋值书签名
            oBookMark[0] = "ReceiveName";
            oBookMark[1] = "content";
            oBookMark[2] = "WriterName";
            oBookMark[3] = "date";
            //赋值任意数据到书签的位置
            oDoc.Bookmarks.get_Item(ref oBookMark[0]).Range.Text = "王先生";
            oDoc.Bookmarks.get_Item(ref oBookMark[1]).Range.Text = "最近身体好吗?生活还快乐吗?每天早晨还按时起床吗?上班期间还玩游戏吗?...............";
            oDoc.Bookmarks.get_Item(ref oBookMark[2]).Range.Text = "你的对头XXX";
            oDoc.Bookmarks.get_Item(ref oBookMark[2]).Range.Text = DateTime .Now.ToShortDateString();
            //弹出保存文件对话框,保存生成的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;
                //括号中的参数为一些参数,可以自己设计,也可以使用缺省的!(具体什么意思可以去查一下API文档!)
                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);
            }

        }
    }

当然实际中这些数据可能是要从数据库中获取,然后保存的,这个过程就是小CASE了!  希望对您有帮助!

时间: 2024-10-13 14:20:17

动态数据生成Word文档的相关文章

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

今天正好有人问我,怎么生成一个报表式的Word文档. 就是文字的样式和位置相对固定不变,只是里面的内容从数据中读取. 我觉得类似这种的一般用第三方报表来做比较简便.但既然要求了Word,只好硬着头皮来. 网上的方法大多数都是从一个GridView或表中获得数据后向Word中添加一个表格. (图1) 我们使用Word模板来实现,方法如下: 1.首先需要向工程中的“引用”加入Word类库的引用(图2).我是Office 2003.其他版本可能略有不同.在COM里面 (图2) 2.用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里然

java通过freemarket生成word文档

1.使用freemarker的原因是:由于POI和ITEXT在处理复杂word文档格式时欠缺,尤其在生成WORD文档时,(其他处理word的工具需要动态加载windows动态链接库,有些还要收费),并且需求要在WORD指定位置插入图片,所以在参考了POI和ITEXT官网处理WORD和网络上其他处理WORD的工具后,发现freemarker可以通过设定WORD模板,经过处理生成ftl文件后,可直接通过freemarker的工具jar包可以生成指定位置的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

freemarker+Jfreechart生成Word文档(含图片)

这几天再弄一个报表,要统计一些信息最终的部分展示结果如下: 基本工具freemarker,jfreechart 工程的部分结构如下 与生成Word有关的类主要有FreemarkerConfiguration和WordGenerator代码如下: import com.bqs.ares.common.utils.CommonUtils; import freemarker.template.Configuration; import java.io.File; import org.slf4j.L