首页 > 代码库 > 动态数据生成Word文档

动态数据生成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了!  希望对您有帮助!

 

动态数据生成Word文档