一、前言
本来想在PPT里面实现“滚动式”随机点名,但网络上提供的方法大都是将每个人的名字各做成一页演示文稿,然后设置自动播放,通过手动控制播放的暂停来实现随机点名。这种方式过于繁琐,且不便于修改点名用的名单,于是自己探索了一下使用excel和wps表格实现随机点名,然后在PPT中使用超链接到对应的excel或wps表格文件,并在其中实现随机点名,最后将点名结果同步到PPT中完成展示。
二、为啥要将excel和wps表格分开
excel用来编辑宏的语言为vba语言,wps用来编辑宏的语言为js语言(wps也提供vba开发环境,但是需要充值会员才能使用,以下均以js来分析)。语言的不同使得两者宏不能相互兼容,也就是说在excel中编辑好的且运行正常的宏,放到wps中则会报错且无法运行,反之亦然。
三、基本思路
- 定义相关变量
- start 滚动式显示的第一个名字对应的索引
- final 点名名单的总人数
- i 计数变量
- time 延时变量
- step 点名的要“滚动式”显示的名字的个数
- 产生随机数,将其视为点名开始的位置start
- 循环内部嵌套延时函数(毕竟你也不想看到唰的一下程序就结束了,这样根本就看到滚动的效果)
- 判断起始位置start与final的关系,避免溢出
-
输出数据到指定单元格
-
使用vlookup()实现名字的显示
四、excel实现过程
1.启用宏
默认状态下,为了避免被恶意攻击,宏都是被关闭的,需要我们手动启用。
- 点击开发工具-宏安全性
- 选择启用所有宏(不用的时候建议关闭)
2.打开代码编辑器
3.创建代码模块
4.写入代码
(1)构建函数框架
sub Count()
函数体
end sub
(2)定义变量
Dim i As Integer
Dim time As Single
Dim start As Integer
Dim final As Integer
Dim step As Integer
step = 8
final = 21
time = Timer
start = Int(Rnd * final)
使用Rnd返回(0,1]之间的数值,将其乘以final后取整则为(0,final]之间的整数,将这个值赋给start.
(3)构建循环
For i = 1 To step
Do
函数体
Loop
Next i
(4)循环内嵌套延时,并判断是否溢出
time = timer
for i = 1 to step
Do
If Timer - time > 0.1 Then
If final - start > step Then
time = Timer
Sheet1.Cells(2, 1) = start + i
Else
time = Timer
Sheet1.Cells(2, 1) = start - i
End If
Exit Do
End If
Loop
Next i
Timer:返回一个 Single类型的数值,代表从午夜开始到现在经过的秒数。
在循环外先给time赋值,在循环内判断当前时间与此前的timer记录的时间之差是否大于step,若是,则进行下一步操作。
判断final-start是否大于step(即判断最终写入单元格的数值是否超出总人数),若大于则每次循环写入单元格B2(sheet1.cells(2,1))递增1,若小于则每次写入的递减1。
(5)完整代码如下
Sub Count()
Dim i As Integer
Dim time As Single
Dim start As Integer
Dim final As Integer
Dim step As Integer
step = 8
final = 21
time = Timer
start = Int(Rnd * final)
Sheet1.Cells(1, 1) = "初值为:" & start
For i = 1 To step
Do
If Timer - time > 0.1 Then
If final - start > step Then
time = Timer
Sheet1.Cells(2, 1) = start + i
Else
time = Timer
Sheet1.Cells(2, 1) = start - i
End If
Exit Do
End If
Loop
Next i
End Sub
(6)保存代码,另存为.xlsm文件
(7)插入执行宏的按钮,以便运行宏
在保存后的.xlsm文件中,单击开发工具-插入-按钮
设置此按钮指向已经编辑好的宏代码(这里为Count)
5.在excel中使用vlookup()函数
在B2单元格输入=vlookup(A2,你的数据表,名字所在的那一列,False),即可将代码得出的随机数字转换为对应的名字。
6.效果展示
五、wps实现过程
1.启用宏
与excel类似,在开发工具栏找到“宏安全性”,并设置为对应的权限
2.打开代码编辑器
3.插入模块
4.写入代码
(1)构建基本函数框架
与excel的vba语言不同,wps使用js语言,定义的框架为函数形式
function test(){
函数体
}
(2)定义变量
使用js语言时,无需声明变量类型
使用Math.random()返回(0,1]的随机数,乘以final则为(0,final]的随机数,再通过Math.round四舍五入得到整数
使用(new Date).getTime()获得此刻时间
var i =1
var time=(new Date).getTime()
var final=20 //总人数
var start=Math.round(Math.random()*final)
var step=10 //设置步长
var turn=400 //设置延时时间为turn ms
(3)构建循环
while(i<step){
函数体
i=i+1
}
(4)循环内嵌套延时,并进行相应判断
基本原理同excel中vba代码一致
这里使用Range("D2").Value2=xxx给D2单元格赋值
while(i<step){
if((new Date).getTime()-time>turn){
time=(new Date).getTime()
if(final-start>step){
Range("D2").Value2=start+i
}
else{
Range("D2").Value2=start-i
}
i=i+1
}
}
(5)完整代码如下
function test(){
var i =1
var time=(new Date).getTime()
var final=20 //总人数
var start=Math.round(Math.random()*final)
var step=10 //设置步长
var turn=400 //设置延时时间为turn ms
while(i<step){
if((new Date).getTime()-time>turn){
time=(new Date).getTime()
if(final-start>step){
Range("D2").Value2=start+i
}
else{
Range("D2").Value2=start-i
}
i=i+1
}
}
}
(6)保存代码,另存为.xlsm文件
(7)插入宏按钮
此过程与excel一致
5.在wps表格中使用vlookup()函数
6.效果展示
六、链接到PPT中(需要在PPT中开启宏)
1.链接到powerpoint
在幻灯片中点击插入-对象
选择“由文件创建”,选择刚才保存宏后的.xlsm 文件 (必须是使用vba语言编写的.xlsm文件)
点击插入的对象即可跳转到excel中,从而进行随机点名
2.链接到wps演示
点击插入-对象
选择由文件创建(用js语言编写的.xlsm文件)
单击插入的模块即可跳转至wps表格中进行随机点名
七、总结分析
代码中设置的参数均可根据个人需要进行修改,而且点名用的名单可以直接复制粘贴到编辑好的.xlsm文件中,只需修改对应参数即可使用。这比在PPT中创建多页幻灯片,然后手动控制播放来实现随机点名更加模块化,便于修改名单和滚动显示的名字的总数(step变量)。
但不足的是,该方法制作的PPT展示效果欠佳,没有绚丽的特效,后续将想方法解决这个问题,以使该使用宏的随机点名方式能够得到好的展示。希望大家能提供美化建议,让数据分析变得具有可视化的美,让PPT展示具有程序的模块化之美。