查看原文
其他

一键制作简易座牌(一个小功能的诞生过程)

不坑 不坑老师
2024-09-01

大家新年快乐,好久没有更新文章了,这几天一直在更新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种版本教材)


继续滑动看下一个
不坑老师
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存