注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

快乐小屋

 
 
 

日志

 
 

C#自动生成word文档  

2012-04-25 10:17:25|  分类: C# |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
这两天在打印一批图件。今天终于打印完之后,就需要把它们加上封皮,装订起来。粗略的看了一下,大概有230+个封皮需要做,或者打印,或者手写。无论哪种方法,都是十分费事。讨厌这种重复的劳动,于是就想着能不能写段代码来实现。
  起初的想法,是从数据库中读取数据,然后自动生成Word文件。最后,直接打印word文件即可,简单省事。有了这个想法之后,就在网上收集相关的资料。最后,功夫不负有心人,问题还真的就这样得以解决了。下面,就说一下具体的过程。
  首先建立了一个模板文件,在里面输入具体的内容,设定好自己需要的格式。不变动的文字直接输入,变动的文字输入后,插入为一个书签,名称随便自己制定。不过,需要记住这个名称,因为后面在代码中需要用到。 比如,在这次处理中,我新建了word文件123.doc,然后在其中输入了某某镇某某村。其中,某某村三个字设定为了书签,并命名为Name。然后,就 是循环遍历数据库中的字段,将此书签更换掉就可以了。之所以采用这种方式,是因为相应来说需要完成的任务比较简单,而以COM的方式调用,文档中的书签可 以非常简单的遍历获取到。
  考虑到以后的时候,我也会需要频繁的装订图件,这种打印封面的方法,无疑十分有用。
  代码如下:
static void Main(string[] args)
        {
            string connectionString = @"Provider=Microsoft.jet.oledb.4.0;Data Source=D:\TestDoc\by.mdb";
            OleDbConnection myConn = new OleDbConnection(connectionString);
            myConn.Open();
            string commandText = "select * from temp";
            OleDbCommand myCommand = new OleDbCommand(commandText, myConn);
            OleDbDataReader reader = myCommand.ExecuteReader();
            while (reader.Read())
            {
                string cun=reader["GBCun"].ToString();
                string fileName = @"D:\TestDoc\123.doc";
                string copyName = @"D:\TestDoc\" + cun + ".doc";
                File.Copy(fileName, copyName);
                Word.Application docApp = new Microsoft.Office.Interop.Word.Application();
                Word.Document doc = new Microsoft.Office.Interop.Word.Document();
                object file = copyName;
                object readOnly = false;
                object visible = true;
                object _missing = System.Reflection.Missing.Value;
                doc = docApp.Documents.Open(ref file, ref _missing, ref readOnly, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref visible, ref _missing, ref _missing, ref _missing, ref _missing);
                doc.Activate();
                foreach (Word.Bookmark bm in doc.Bookmarks)
                {
                    if (bm.Name == "Name")
                    {
                        bm.Range.Text = cun;
                    }
                }
                doc.Save();
                doc.Close(ref _missing,ref _missing,ref _missing);
                docApp.Quit(ref _missing, ref _missing, ref _missing);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(docApp);
            }
            myConn.Close();
            Console.WriteLine("OK");
            Console.ReadKey();
        }
本来打算在生成Word文件之后,还想要把这么多的文档合并为一个。不过仔细一想,这个举动太多余,Office自带的插入功能完全可以实现。于是,思考就到此为止,没有进行下去了。
  评论这张
 
阅读(967)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018