使用VSTO写的一个打印工牌/工作证的小程序

转行做HR近2年。最近公司要做工牌,工牌上要打印照片,姓名,工号和部门等信息。一共1000多人,如果手工排版手工打印的话,估计要死人。

于是coding的老毛病又犯了,想写个程序来打印工牌。还是拿最近比较常用vsto来做office插件程序吧。毕竟这个用起来也顺手,因为没有一个hr不会用excel。

一,工牌的大体样子

《图1》

基本元素:企业名称,照片,姓名,工号,部门,企业理念。当然程序并没有限制工卡的内容,这里只是个例子。实际使用时,你可以根据自己的需要来定义格式,定义要打印的内容。

二,实现

想用vsto来做,自然离不开excel。

1,员工花名册和员工照片是有的。那么就有下面的表了:

《图2》

2,报表组件

想到格式可能要变,因此想找一款比较好用的报表工具来设计格式,展示 并且来打印。

正好以前项目上用过一款报表软件,也买过授权,锐浪报表。是个小公司出的产品,但是比较好用,并且免费版也能用,设计和显示的时候有水印,打印出来没有水印。足矣满足要求。

(1)设计下格式(上图,顺便给锐浪做个广告)

《图3》

用的是他的自由格式报表,很好使。设计完后保存为一个文本文件。

这个工具提供了多种开发环境的开发组件,比如 .net下的,我喜欢,很好用。

3,打印窗口

先面试打印窗口的ui设计,很简单,就是一个锐浪的打印控件,拖过来就OK。右边属性窗口。

《图4》

加载报表的代码,很简单,不解释,看锐浪的文档或离职即可。

在显示报表的时候,吧数据喂给控件即可,支持xml格式,json格式,直接访问数据库,等等。我是采用的第一种方式,因为数据就在excel中,我只要按照他的格式组织数据给即可。

4,字段对应

一个实现的细节,说下。

在报表格式里,一个数据项,甚至是图片,都是一个字段,field。在上面提到的xml报表数据中,字段的名字就是数据的节点。在组织数据的时候,是从图2的表中读取,因此要定义下报表字段和excel列的对应关系。

这个对应也是放在excel中的一个sheet中,如下图:

《图5》

数据映射配置:eno=A;ename=B;dept=C;epicfile=D;bkground=%background_img%;org=%org_name%;org_statement=%org_statement%

解释如下:eno(工号)对应A列,ename(姓名)对应B列,。。。。。。。很简单。

报表格式见第8行,是引用的报表格式文件。其实也可以吧报表格式的内容(文本的)直接放在这里。见第5行。我没有用,直接用的文件。因为excel的单元格容量是32767,报表太大放不大。不过一般不嵌入图片的报表都很小。

5,打印窗口跑起来的效果

《图6》

三,最终的效果

《图7》

细心的你可能注意到右边的另外一个奥巴马。这是用office 的 document action panel 实现的一个工卡预览。

《图8》

四,赞助

现在免费程序求打赏比较时髦,我也做了个。

《图9》

特别指出,赞助窗口左侧的水粉画,是女儿的涂鸦之作,还不错吧?就打赏一下吧 :>)

本程序免费使用,欢迎来新索取。[email protected]。

时间: 2024-10-10 16:49:39

使用VSTO写的一个打印工牌/工作证的小程序的相关文章

C# 写的一个生成随机汉语名字的小程序

最近因为要做数据库相关的测试,频繁使用到测试数据,手动添加太过于麻烦,而且复用性太差,因此干脆花了点时间写了一个生成随机姓名和相关数据的类,贴在这里,有需用的同志们可以参考一下.代码本身质量不好,也不算规范,各取所需莫要取笑-.- public class GetRandomName { private static string firstName = @"赵,钱,孙,李,周,吴,郑,王,冯,陈,褚,卫,蒋, 沈,韩,杨,朱,秦,尤,许,何,吕,施,张,孔,曹,严,华,金,魏,陶,姜, 戚,谢

初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助

初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助,如果有bug或者更好的优化方案,也请批评与指正,谢谢,代码如下: 1 var fs = require('fs'); 2 var tel = [ 3 "1/2/4/6/a.tpl.html", 4 "1/2/4/7/9/c.tpl.html", 5 "1/3/5/8/b.tpl.html"]; 6 var demo = function (mulu)

一个简单的计算分数的小程序

一个简单的计算分数的小程序 代码如下: package Day05; public class ExamGradeDemo { public static void main(String[] args) { char[][] answers = { {'C','B','D','C','A','A','D','C','D','C'}, {'A','C','B','D','C','A','D','C','B','D'}, {'A','C','B','D','B','D','C','A','A','

php一个利用cookie限时发帖的小程序

/* * _timed()用来限制时间,如发帖限制 * @access public 表示函数对外公开 * @param $_now_time 现在时间 * @param $_pre_time 要对比的时间 * @param $_time 限制时间 * @param $_string 要提示的字符 * @return $_now_time-$_pre_time 表示返回过了多少秒 * */ function _timed($_now_time,$_pre_time,$_time,$_string

极限工坊——无极限创意小程序|淘小咖

创意? 无极限? 这样的小程序有什么好处? 这年头做小程序的公司80%的都是套用成型的模板,从来都没有一点点新意,而极限工坊小程序却不一样.极限工坊小程序拥有海量的DIY组件.自定义功能,可自由发挥创意,没有任何限制的制作小程序. 其实对于普遍的微信用户来说的话,具有创意性的.设计界面极佳的小程序更容易得宠,还有就是功能性以及方便性这两方面.拥有这样的小程序,要比同行业的小程序更容易让大家接受,尤其是带有引导性的,体验感极佳的小程序.所以说创意就是重中之重了,对于后期的引流.推广的G点等都有好处

极限工坊资讯:小程序的算法说明,让运营不是难事|淘小咖

近期传统行业不断进军小程序,对小程序进行布局,但是很多拥有小程序的商家,都不知道怎么去运营.去推广 ,所以今天才会根据大众的苦恼,给大家讲讲小程序的算法. 算法说明: 1.给予营销实践对于小程序应用的推动价值,可动态反应小程序应用变化,而且极限工坊后台可以查看实时数据: 2.选取人气.搜索.使用.分享共四大指标,综合考虑多指标要素,全方位覆盖小程序应用全流程主要环节: 3.评估小程序在每个指标下的相对位置,可单独比较单一唯独指标,也可多维度综合比较. 选取指标说明: (1)人气指标 UV,止痛剂

利用x64_dbg破解一个最简单的64位小程序

最近在研究学习一些逆向的东西,其实之前也涉及到这方面的东西,只是之前的系统和应用,基本上都是32位的,所以直接用od来分析就行了,这方面的资料在网上很多,随便一搜到处都是,不过随着技术的不断发展,64位系统出现了,随之64位的应用也出现了,而od只能分析32位应用,所以一些64位应用,od是没办法分析逆向的,所以,在这里要提到另一个可以用于分析64位应用的调试软件,名字叫x64_dbg.网上对于这款软件的介绍很少,只是说能分析64位应用,具体用法也找不到,不过我找到了它的一个教程,里面有一个最简

极限工坊电商小程序相比传统电商的优势?你还在犹豫吗?

随着移动互联网的发展,小程序在各行各业的应用也越来越广泛,现在很多商家已经通过小程序实现了盈利,小程序所带动的电商行业就是其中的代表.电商+小程序已经成为一种趋势,很多品牌商也纷纷投入到电商小程序中. 很多人会问有那么多的电商平台为什么还要做微信小程序开发呢?今天极限工坊小编就来说下小程序与传统电商相比有什么优势呢?主要原因有以下几点.一:自主性强 商家使用自己的小程序进行营销和产品推广的话,不会受到平台的限制,怎么销售商家自己定,客户的消费数据可以在小程序后台进行分析,数据掌握在商家的手中,而

一个简单的加减乘除自动生成小程序升级版(JAVA)

1 import java.util.Scanner; 2 public class Suan { 3 public static void main(String[] args) { 4 int []b;//设置数组来存放随机产生数 5 b=new int [4]; 6 Scanner in=new Scanner(System.in); 7 System.out.println("请选择你想练习的题型:"); 8 System.out.println(" 1.分数的加减乘