一键制作简易座牌(一个小功能的诞生过程)
大家新年快乐,好久没有更新文章了,这几天一直在更新word插件,1月25号更新的版本,想必大家已经通过“在线更新”体验到了。
只要一提到“座牌”,网上最多的教程就是“邮件合并”。确实,用A4纸排版然后用邮件合并能快速制作出如下的座牌。
关于邮件合并,在很多年前我就发过“奖状”和“席卡”的制作,大家可以翻翻我的历史文章。
用那种厚的A4纸直接打印制作,确实非常方便。但办事的人员觉得方便不管用,最终还得是领导同意才行呢!
比如,万一要求用的是这种“台签”呢?
办公室负责接待的同事,默默流下了泪水。
它不是A4纸大小,虽然也可以用邮件合并,但打出来还是得用剪刀或裁纸机剪。
需要同时在excel和word中操作,生成的结果还有“分节符”,有的人觉得也不那么方便呢!
今天,我们就来看看@不坑老师 是如果为大家解决这一困难的;也顺便来看看,在大家眼中平时不起眼的一个小功能,是如何诞生的。
(此功能将在“不坑盒子”word插件的下一个版本中出现)
诞生过程和想法
既然要用到工具,肯定是有很多数据要处理,不然直接打几个字不就可以了?对吧?
所以,我先在窗口中画了一个多行输入的文本框,每行输入一个名字。
代码在取得用户的输入后,按换行
拆分就能得到一个一个的姓名了。
names = Split(TextBox1.Text, vbCrLf)
我们在此不选择邮件合并的原因就是,少开一次excel,且必须用剪刀裁剪;那我们得自由控制标签的大小才行,于是,加入了“宽高”的控制。
既然宽度和高度都是使用者自己来决定了,字号大小怎么办呢?
如果让使用者自己选,那很可能前面几次选择都会不适合(太大或太小),需要几次试错的过程,太浪费时间。
于是我是这样做的:以3个字的名字为基准,根据宽度来计算字号大小,2个字的名字和3个字的字号相同;大小3个字的名字字号变小。
还可能会出现一种情况:通过宽度计算出来的字号,大于了高度,就会把“台签”的高度给撑大,那样就放不进透明的底座了!
于是,增加一个判断:如果计算后的字号大于高度,那么字号就等于高度。
代码就这样了:
size = (w - 20) / 3
If size > h Then size = h '字号大于了高度,则字号调整为高度大小
If Len(name) > 3 Then
size = (w - 20) / Len(name) '计算字号
If size > h Then size = h '字号大于了高度,则字号调整为高度大小
End If
就这样,把名字进行一次遍历,再根据每个名字的数量进行一次循环,代码基本就成型了:
此时,突然想到:万一别人需要不同的字体呢?有的单位喜欢用黑体,有的单位需要用行楷……
那就加一个ComboBox的字体选择框吧!
需要用代码来读取系统字体,并把系统字体放入ComboBox中:
Dim font As New System.Drawing.Text.InstalledFontCollection
For Each ff As FontFamily In font.Families
ComboBox1.Items.Add(ff.Name)
Next
已经接近尾声,此时又想到:这次使用的台签尺寸、字体,或许下次也是使用这个呢?
那还得把本记的参数记忆住呢!
得益于之前制作好了读写配置的代码框架,添加起来也算是容易。
宽度、高度、数量、字体,在每次使用后都能写入配置中,下次再使用时从配置中读取上一次的设置。
TextBox2.Text = GetIni("公文", "座牌宽度", 14)
TextBox3.Text = GetIni("公文", "座牌高度", 8)
TextBox4.Text = GetIni("公文", "座牌份数", 2)
Dim oFont = GetIni("公文", "座牌字体", "黑体")
Dim i = 0, index = 0
Dim font As New System.Drawing.Text.InstalledFontCollection
For Each ff As FontFamily In font.Families
ComboBox1.Items.Add(ff.Name)
If ff.Name = oFont Then
index = i
End If
i += 1
Next
ComboBox1.SelectedIndex = index
最终,就成了你们看到的这个样子:
后记
完成同一个任务、解决同一个问题,有很多方法和手段;相信看完本文后,还是有很多人会觉得“邮件合并”方便。
如果我在文中不多次强调,留言区很快就会被“你连邮件合并都不会用?”刷屏。
在我们掌握了某一种解决问题的方法后,或许可以尝试了解另外的方法,而不要拿着已有的方法拒绝别的思路。
或许针对现有问题而言,你所掌握的方法或许确实更高效,但别人的思路或许能解决下一个问题呢?
我为插件添加这一个功能,是因为我曾亲眼见到很多负责接待的人员,他们在一个一个画方框、打名字、剪名字。
我也教过他们邮件合并,但他们觉得要用excel增加了难度;还不如人工手动输入来得痛快。
希望我给插件增加的这一个小功能,能帮到他们。
- end -
看完文章:
1.点在看,帮助更多的人看到这篇文章。
2.写留言,对文章进行评论,我会尽可能回复。
3.点关注,关注并星标,第一时间获取最新内容。
微课到底怎么才能获奖?原来关键在这儿!
2023年春语文1-6年级下册教材、教案、课件、课文朗读、教学计划
2023年春数学1-6年级下册教案课件资源(人教版、北师大版、西师版、苏教版、冀教版)
2023年春英语1-6年级下册教案、课件(8种版本教材)