网际飞扬

还记得年少时的梦么,醒不过来 便信以为真……

主题背景
本网站首发版本创建于1999年4月
网际飞扬
手机网站二维码

请使用手机扫描二维码,登录网站手机版。

office开发:基于c#实现模板打印工具的步骤和方法

  • 2021-01-26
  • 1612
  • 飞驰的心
  • 0

2020这一整年由于疫情影响,公司没啥事干,于是开启了无主题的学习模式,想起啥就学啥……

忽然想起之前做的一个模板打印工具好像不怎么完美,于是重启拾起源码开始重构这个软件,说起模板打印工具(我实在不知道怎么给这个软件取名字)。其实这个软件就是根据数据库的记录,将内容以特定格式打印出来;例如:学生证(各类卡证)、各类通知书、各类票证等等。

顺便下载了几个同类软件,准备借鉴一下他们的开发思路,结果无一让我满意;很多开发人员对工具软件的开发,本末倒置,本来指向性极强的工具软件加了一大堆复杂的冗余功能,用户使用麻烦、学习成本也高。于是,我的开发思路就从简单入手——

1、放弃数据库

因为这是个单机工具软件,数据库的功能无非就是把excel导入后,一条条输出然后进行打印。所以从这一点分析来看,数据库可有可无;我们完全可以用软件直连excel,然后输出条目实现打印;

有人说了,用excel模拟数据库效率问题…… 我想说:单机软件对这几毫秒的时间实在是没必要纠结。咱这是一个打印软件,又不是什么科学计算软件,对这一点效率可以忽略不计;但没有数据库的好处显而易见:从部署维护方面就轻便了很多。

2、采用原生的Office组件实现

微软在Office2007以后提供了丰富的API文档,几乎可以通过代码实现一切Office的原生功能;我们现在要开发的这个软件从结构上说很简单,就是把Excel的每一条数据读出来,然后写入Word的指定位置;Word的指定位置怎么定位呢?我们可以使用自定义标签替换的方法实现。

这就涉及到如何读取word文档?以读txt文本的方式读?这是做梦;

所以我们就要用到微软office的api了;

3、实现流程

a、通过各种语言自己的方式连接excel文件,获取行记录;写入一个临时集合或者实体类根据自己的习惯随便啦。

b、通过微软提供的方法读取word文档(这个word文档你提前需要创建好,里面在合适的位置写好你的自定义标签。) 以c#为例,引用Microsoft.Office.Interop.Word.Application方法,相关用法微软提供了大量文档自己去看;

c、将步骤a的临时集合拿出来,一个一个替换掉word模板中的标签,然后输出(打印或另存)即可。

模板打印工具 excel数据文件(用户自定义)

模板打印工具 通过word设计模板文件 最大化提升用户体验

模板打印工具 采用多线程输出

需要注意的点:

a、打开word的时候线程会阻塞,所以得使用多线程操作打开步骤;

b、建议启用时间控制器,每1或3秒操作一次,这样给excel和word的磁盘读写留下缓冲时间,我们要考虑到有些人的电脑可能慢,如果不加间隔控制有可能配置低的电脑上会把电脑搞死机;

c、Microsoft.Office.Interop.Word这个组件不要小觑,它其实是在后台打开了一个word的窗口,只不过隐藏了你看不到而已;所以每一条操作结束后,必须关闭这个操作,我在开发调试的时候,没一会儿电脑慢的要死;打开任务管理器一看,乖乖~ word线程居然有几百个(相当于打开了几百个word)。


实现流程很简单,用户用着也很方便,所以这种小工具实在没必要大动干戈的做到又大又复杂。



本博客所有内容均为原创,原则上我不希望你转载。如特别喜欢而转载的话,请务必注明出处“网际飞扬 http://www.fayo.net” 否则本人闲来无事可能会把你误当成维权的靶子。

评论

验证码

全部评论

共{{commentCount}}条
  • {{i+1}}楼
    {{rs.Msg_Sender}}{{rs.Msg_Datetime}}

    {{rs.Msg_Content}}

0
播放器封面
  • 宠物精灵