.net下实现Word动态填加数据打印

今天研究了一下.net下实现Word动态填加数据打印的做法,觉得颇有收获~
      以前做过Excel相关的东西,所以对OFFICE的COM有一些了解,很顺利的找到了需要引用的COM和其帮助文档~具体做法是在引用里添加 COM --------Microsoft word 11.0 object library, 然后引入命名空间:


代码如下:

using WordApplication = Microsoft.Office.Interop.Word.Application; 
using Document = Microsoft.Office.Interop.Word.Document; 
using Bookmark = Microsoft.Office.Interop.Word.Bookmark; 
具体实现代码:

WordApplication word = null; 
 /**//// <summary> 
 /// 实现动态添加数据打印预览 
 /// </summary> 
/// <param name="path">word模板路径</param> 
/// <param name="adStu">调剂学生相关信息对象</param> 
private void PrintPreview(string path, AdStuInfo adStu) 
        ...{ 
            if (word == null) 
            ...{ 
                word = new WordApplication(); 
            } 
            object oMissing = System.Reflection.Missing.Value;   //这个东西找了好久,不像操作Excel,用Type.mising还不行. 
            object path1 = (object)path; 
            Document doc = null; 
            doc = word.Documents.OpenOld(ref path1, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing); 
            替换书签#region 替换书签 
                object markName = "报考单位"; 
                Bookmark bm = doc.Bookmarks.get_Item(ref markName); 
                bm.Range.Text = adStu.SiSch; 
                markName = "报考专业"; 
                bm = doc.Bookmarks.get_Item(ref markName); 
                bm.Range.Text = adStu.SiMa; 
                markName = "考生姓名1"; 
                bm = doc.Bookmarks.get_Item(ref markName); 
                bm.Range.Text = adStu.Name; 
                markName = "考生编号"; 
                bm = doc.Bookmarks.get_Item(ref markName); 
                bm.Range.Text = adStu.No; 
                markName = "调剂专业"; 
                bm = doc.Bookmarks.get_Item(ref markName); 
                bm.Range.Text = adStu.AdMa; 
                markName = "打印时间"; 
                bm = doc.Bookmarks.get_Item(ref markName); 
                bm.Range.Text = GetDate().ToString(); 
                markName = "考生姓名2"; 
                bm = doc.Bookmarks.get_Item(ref markName); 
                bm.Range.Text = adStu.Name; 
            #endregion 
                word.Visible = true; 
                doc.PrintPreview(); 
        }

具体解释:     首先有一个模板.doc文件,在该模板内需要添加数据的地方设置成书签,.net程序所要的事情就是打开该模板,用具体需要添加的值去替换先设定好的书签,然后返回Word的打印预览页面,思路很简单~但是问题也是有滴~~

这个程序是做打印我们学院研究生办发复试生调卷函用的,但是表格是从学校研究生部那弄来的,主要还是在那边盖的章~所以就只能用那些表格来打,但是给的表格留的空实在太小,没法用同样的字体给打上去,怪就只能怪研究生部根本没想到我们这会有这个高级的东西~~哈哈~估计一般都是手工填的~~~明天过去不知道具体要怎么弄,估计这东西在打印调卷函是发挥不出作用了~~~留着以后肯定有用!

4月16日修改:

几天前做的仔细想想还是有需要改进的地方.我前面做的只是一个个文档的填,一个个的打印,考虑资料上百个以后这样做打印机的打印的效率不高,因为每次只给打印机发送一个打印任务,它接受下一个任务是需要时间的,所以我的想法是把需要打印的文档生成成一个文档,这样不但可以保存文档,还可以只要向打印机发送一个任务就可以打印资料了,NB的打印机打印速度是很快的~~

把具体的操作写下来吧~思路是打开两个word文档(当然,生成过程中全不可见),一个还是按照前面说的替换书签,但是不做打印处理,而是复制到另外一个文档(该文档存储所有已经生成好的表格,最后得到的就是这个word文档,打印或者保存随便他们).具体的代码如下:

先在using里引如:
using Range = Microsoft.Office.Interop.Word.Range;

doc.Content.Copy();    //复制doc里的内容,doc是每次做替换书签的文档.
object save = false;               
doc.Close(ref save, ref oMissing, ref oMissing);   //关闭doc.
Range range = printDoc.Content;   //全中printDoc里的全部内容,printDoc是目标保存文档.
range.Collapse(ref oMissing);   //确定粘贴的位置,其实这个地方我想放一个有效的参数,把粘贴的位置设为文档的末尾,而不是用默认的文档的最前面,但是帮助文档是VB写的,传了一个Direction:=wdCollapseEnd的东东,我弄半天没弄出来,亏我还是懂VB的~~伤心~以至于我都忘了传个空值过去,卡了老半天!谢谢某人和我发了几条短信,就一下把我打通了~
range.Paste();    //粘贴到目标位置,一次填写就完成了.

虽然是这样,但是在生成目标文档的时候也是很耗资源的,我看了一下那程序竟然占了100多M的内存!!而且~~而且~~我的机器在前两次实验都没顶住!死机了~~当时真是在抓狂了~谁知道后来几次竟然无声无息的成功!可是想想学院那机器能扛住么~~哎继续优化吧!这次把界面也改了一下,上面的生成在一的单独线程里,以至于主界面不会像死了样的,而且在主界面上还做了个显示生成状态的Lable,这东西还真管用~后面两次的实验,看着已生成数目超过前两次死机的数目~~紧张的心情缓解了~再看着数目超过100~~高兴了~最后慢慢接近完成数目时~~兴奋得抓狂!!!!!哈~~

哎~废话多了点~有用的就那么几行代码~

(0)

相关推荐

  • asp.net下将页面内容导入到word模板中的方法

    1,新建word模版,方法是找需要用程序填充的word文档,在需要输入的地方用"书签"(插入-->书签-->输入id-->ok)标记后保存既可. 2,在word模版上修改安全添加everyone 可读,以防文件无法打开. 3,在工程里添加"引用"找到"Microsoft Word 10.0 Object Library"或"Microsoft Word 11.0 Object Library"点确定. 4,新

  • asp.net(c#)下读取word文档的方法小结

    第一种方法: 复制代码 代码如下: Response.ClearContent(); Response.ClearHeaders(); Response.ContentType = "Application/msword"; string s=Server.MapPath("C#语言参考.doc"); Response.WriteFile("C#语言参考.doc"); Response.Write(s); Response.Flush(); Re

  • 从ASP.NET得到Microsoft Word文档的代码

    背景 自动化(Automation)是一个过程,它允许编程语言譬如Visual Basic.NET或C#写的应用程序可以编程控制其它应用程序.自动化到Word允许你执行像创建新文档,向文档中添加文本,邮件合并,还有控制文档格式这样的操作.使用Word和其它Microsoft Office应用程序,几乎所有你能在用户面板上手动实现的操作都可以通过自动化编程实现.Word通过一个对象模型来实现这个编程功能性(programmatically functionality).对象模型是一系列类和方法,它

  • asp.net 在线编辑word文档 可保存到服务器

    注意:你要打开的服务器端的word文档要有写权限.iis要开起 web服务扩展中的webdav为允许 具体参考文档msdn:http://msdn2.microsoft.com/en-us/library/ms454230.aspx 原理:通过 javascript 创建一个ActiveX控件实例(为浏览者机器Program Files\Microsoft Office\OFFICE11\owssupp.dll或Program Files\Microsoft Office\OFFICE10\ow

  • 比较简单的将数据信息导入wrod文档方案(C# for word)

    复制代码 代码如下: /// <summary> /// 设置Word模板,word表格样式在此设置 /// </summary> /// <param name="dsTr"></param> /// <returns></returns> protected string SetWordTemplate(string dsTr) { StringBuilder html = new StringBuilder(

  • .net下实现Word动态填加数据打印

    今天研究了一下.net下实现Word动态填加数据打印的做法,觉得颇有收获~       以前做过Excel相关的东西,所以对OFFICE的COM有一些了解,很顺利的找到了需要引用的COM和其帮助文档~具体做法是在引用里添加 COM --------Microsoft word 11.0 object library, 然后引入命名空间: 复制代码 代码如下: using WordApplication = Microsoft.Office.Interop.Word.Application;  u

  • jQuery实现下拉菜单动态添加数据点击滑出收起其他功能

    上面的人要hui admin  做页面,本人前端比较菜,这框架也没用过. 因为是动态添加数据 .表也没有,..然后子菜单列表只能通过字符串拼接的方式显示. (伪造的)数据是传过来了 发现这个框架的点击菜单,子菜单滑出的效果触发不了,应该是封装了吧..反正不会引用.就自己写了个点击事件(,列表格式还是参照模板). ①:请求数据+ul拼接 比较糙,两边icon 无力回天,不过功能是实现了 $.ajax({ url:'/type/reportType', data:{"token":getC

  • 浅谈vue单一组件下动态修改数据时的全部重渲染

    今天在学习vue的过程中,发现一个有趣的现象. 在某一组件下的某一数据通过点击事件被动态修改的时候,对应view中的数据同步的进行了修改,没错,这不是废话吗,vue的一大特色就是数据的双向绑定.可有趣的是,该组件下我写的另一个用Math.random()的data值对应的值和视图也发生了变化 这就让我这个刚入门的小白有点奇怪了,我修改一个,怎么变了两个????脑洞放开一想,会不会数据在双向同步的时候,发生了什么,比如.是不是只要有一个节点变了,node都重新进行了加载??? 我想这其中的缘由必定

  • jsp实现针对excel及word文档的打印方法

    本文实例讲述了jsp实现针对excel及word文档的打印方法.分享给大家供大家参考,具体如下: 因为ms word和excel的文档都支持html文本格式,因此可以先用word或excel做好模版,另存为Web页,然后将该html改成jsp,将数据部分动态填入即可,不用很辛苦的调整格式 word页面只要在jsp头设置如下指令: 复制代码 代码如下: <%@page contentType="application/msword;charset=GBK" %> excel如

  • python实现在windows下操作word的方法

    本文实例讲述了python实现在windows下操作word的方法.分享给大家供大家参考.具体实现方法如下: import win32com from win32com.client import Dispatch, constants w = win32com.client.Dispatch('Word.Application') # 或者使用下面的方法,使用启动独立的进程: # w = win32com.client.DispatchEx('Word.Application') # 后台运行

  • pc加载更多功能和移动端下拉刷新加载数据

    感觉一个人玩lol也没意思了,玩会手机,看到这个下拉刷新功能就写了这个demo! 这个demo写的比较随意,咱不能当做插件使用,基本思想是没问题的,要用就自己封装吧! 直接上代码分析下吧! 布局: <ul class="show-area" style="min-height:100px;"></ul> <button class='page-btn-nick' >加载更多</button> 就2行,只为实现功能,足矣

  • jQuery实现模仿微博下拉滚动条加载数据效果

    本文实例讲述了jQuery实现模仿微博下拉滚动条加载数据效果.分享给大家供大家参考,具体如下: <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>滚动条距离底部</title> <script src="jquery-1.6.2.min.js" type="text/javascript&

  • jquery Ajax实现Select动态添加数据

    jquery Ajax实现Select动态添加数据,具体内容如下 1.背景  最近在工作中,遇到了一个关于select的问题.一般情况下,select下拉框中的数据都是固定的或者直接在jsp中读取列表值显示.但是,这次要实现select与别的选项框联动,也就是要动态添加option数据.查阅了很多资料,终于搞定.下面就分享一下,如何利用jQuery和Ajax实现select动态添加数据. 2.本文代码实现的是车辆型号根据车辆品牌联动显示的功能.首先,是jsp中的车辆品牌定义,这个很简单.如下:

  • ASP.NET仿新浪微博下拉加载更多数据瀑布流效果

    闲来无事,琢磨着写点东西.貌似页面下拉加载数据,瀑布流的效果很火,各个网站都能见到各式各样的展示效果,原理大同小异.于是乎,决定自己写一写这个效果,希望能给比我还菜的菜鸟们一点参考价值. 在开始之前,先把实现的基本原理说一下.当夜幕下拉到底部的时候,js可以判断滚动条的位置,到达底部触发js方法,执行jquery的ajax方法,向后台一般处理程序夜幕ashx文件请求数据源,得到json格式的数据源.然后,遍历json数据源,拼接一个li标签,再填充到页面上去. 首先,我们来做个简单的html页面

  • easyui下拉框动态级联加载的示例代码

    easyui的下拉框动态加载数据,高校中要根据首先查询所有学院,然后根据学院动态加载课程.下面看如何实现. 1.界面效果 2. html + js代码 <span>学院名称:</span> <input class="easyui-combobox" style="width:30%;" id="collegeName"> <span>课程名称:</span> <input cla

随机推荐