.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;

/**

/// 实现动态添加数据打印预览

///

/// word模板路径

/// 调剂学生相关信息对象

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~~高兴了~最后慢慢接近完成数目时~~兴奋得抓狂!!!!!哈~~

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

相关阅读:

php小技巧 把数组的键和值交换形成了新的数组,查找值取得键

一个基于PDO的数据库操作类(新) 一个PDO事务实例

linux Intel 845集成显示驱动下载

ECMAScript类型转换详解

JSP入门初级教程之plugin的使用

Java 正则表达式详解

jqeury eval将字符串转换json的方法

解决读取IIS服务器绝对路径错误的方法

Windows Server 2008升级考试出炉

微软宣布Windows 7和Windows 2008 R2上市时间表

讲两件事:1.this指针的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件处理上的区别

基于jquery的监控数据是否发生改变

Windows注册表更加安全的设置技巧

Firefox window.close()的使用注意事项

php 动态打印 word,JSP_.net下实现Word动态填加数据打印,今天研究了一下.net下实现Word - phpStudy...相关推荐

  1. select下拉框动态获取数据

    需求:select下拉框中的数据是从后台接口中获取的,而不是自己写的假数据 步骤:(这里是用jquery及ajax发送请求) 一.页面上导入jquery在线资源 二.代码实列如下(仅供参考) < ...

  2. java下拉框读取数据库数据_在一个jsp页面实现二级下拉框联动,实时读取数据库数据...

    在一个jsp(SUN企业级应用的首选)页面实现二级下拉框联动,实时读取数据库数据,这个方法非常使用,只需要修改很小的地方就可以使用.设计的文件,serch.jsp(SUN企业级应用的首选),main. ...

  3. SpringBoot导出word模板并动态渲染数据

    导出word模板并动态渲染数据 一.需求介绍 背景:需要导出word模板的时候,有些数据是动态或者图片等不确定因素的时候.根据需求定制好的模板要求填充数据,那么这个时候就需要进行根据word模板进行动 ...

  4. Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能 (转)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9255575 最 近项目中需要用到ListView下拉刷新的功能,一开始想图省事,在 ...

  5. 将Word文档转换为PDF时出现“PDFmaker文件遗失,要在修复模式下运行安装程序吗?”的提示

    鼠标右击将Word文档转换为PDF时出现"PDFmaker文件遗失,要在修复模式下运行安装程序吗?"的提示,运行完安装程序以后,问题还是没有解决,依旧有提示,这是什么原因,我电脑装 ...

  6. java 解析word模板为xml, 动态填充数据到xml,最后输出word文档

    java 解析word模板为xml, 动态填充数据到xml,最后输出word文档 在项目中, 一开始是使用java Apache poi 根据word模板生成word报表, 后面发现框架有个低版本的p ...

  7. java生成word文档_Java多种方式动态生成doc文档

    本来是要在Android端生成doc的(这需求...),最后方法没有好的方法能够在Android上做到完美,最后还是只能搬迁到服务器.不浪费,还是记录下各框架不支持Android的原因以及他们的特点. ...

  8. 使用freemarker生成word文档(包含遍历多条数据、图片)

    在做项目的过程中,有时候需要把数据生成word文档,常用的有POI.ITEXT等,在这篇文章中我们使用freemarker模板来生成我们想要的word文档. 首先我们需要使用office word来编 ...

  9. 【最强解决办法】日式打印图片显示不全(word预览却是全的),打印画质下降、转PDF下降等问题

    原文带图片链接:[最强解决办法]打印图片显示不全(word预览却是全的),打印画质下降.转PDF下降等问题 最近写论文,由于学会要求PDF稿内的图片大于300dpi,于是在word那儿折腾了半天. 有 ...

最新文章

  1. junit集成Hamcrest测试集合中某个属性是否包含特定值
  2. 变换判断滤波器类型_7.4 低通IIR滤波器的频率变换
  3. Spring Boot 应用系列 1 -- Spring Boot 2 整合Spring Data JPA和Druid,双数据源
  4. Java代码-CPU占用过高排查思路
  5. 卷积神经网络经典模型要点
  6. 获取js里添加的css文件,用JS添加一个css文件
  7. Springboot/Cloud集成Sentinel进阶实战
  8. 支配计算领域44年之后,摩尔定律的下一步该往哪里走?
  9. (31)Gulp 构建样式文件
  10. 在Ubuntu下后台持续运行Python程序
  11. ITU-R BT601/BT709 BT656/BT1120区别与联系
  12. 两款Java中小医院信息管理系统源码
  13. 基于模型驱动低代码平台的实现原理
  14. 怎样修改用户的计算机配置文件,用户配置文件
  15. DateTime类型的12小时制与24小时制
  16. 6.#闲谈|小编一手腾讯课堂送花脚本 javascript
  17. pow函数以及math.h的一些坑
  18. 嵌入式系统大作业——基于QT的3D模型展示
  19. 苹果6s登录id显示无法连接服务器,iPhone6s appleID无法登入
  20. 15款免费WiFi入侵破解安全测试工具

热门文章

  1. C#高级--反射详解
  2. python截取视频图片_python提取视频第一帧图片
  3. liger ui组件的抽取与封装
  4. iOS 通过URL网络获取XML数据的两种方式
  5. web前端开发现状,游戏前端开发
  6. redis获取列表的值,lrange
  7. 王者服务器维护7月九号,新一服海纳百川7月9日9:30-11:00维护更新公告
  8. vue配合html中实现四舍五入数值后保留原始数值的方法
  9. 用python 实现从fasta文件中获取登记码
  10. 数据智能基础概念和发展历程