请上传宽度大于 1200px,高度大于 164px 的封面图片
    调整图片尺寸与位置
    滚轮可以放大缩小图片尺寸,按住图片拖动可调整位置,多余的会自动被裁剪掉
取消
yzm149530(uid:623546)
职业资格认证:FCA-简道云
页面干净整洁的技巧
在大致页面所有TOP位置,设置一个隐藏控件,这个控件采用公式赋值,示范页面分四段展示效果如下:https://ub35s32n7x.jiandaoyun.com/f/60c336f08b1a1e00082f7b70, 144479 144480 144481 144482 设置的技巧就是通过显隐规则,本文设置如图: 144483 表达式文本:IFS(AND(ISEMPTY(声明),ISEMPTY(答题),ISEMPTY(姓名)!=1),1,AND(ISEMPTY(姓名)!=1,ISEMPTY(声明)!=1,ISEMPTY(答题)),2,AND(ISEMPTY(姓名)!=1,ISEMPTY(声明)!=1,ISEMPTY(答题)!=1),3) 144484 通过以上技巧,您也可以控制的更好! 编辑于 2021-6-12 08:21
极简 极易 极完美,真正随机题库
笔者前面发过一篇帖子:灵活运用Rend函数,选项随机排序垂手可得https://bbs.fanruan.com/thread-135687-1-1.html文中,笔者自我感觉良好,但是功能构建毕竟是极其粗暴地用控件堆叠而成,有道友反馈,虽依葫芦画瓢,但鉴于我的表达能力可能不够清晰,或者因控件太多展现不够直观,所以道友始终不得其门而入。我也感觉挺郁闷的。在仔细一构思,对着函数温故而知新,原来我少有用SCACH公式来表达, 导致结构复杂。对此非常抱歉,特发修正,请道友们参阅此文档。与前文相比,本次改进毋须借助数据工厂整理数据,应用的表达式逻辑清晰,更好扩展,省事省力。在功能上与前文保持一致,主要实现的功能有:1、自动按出题数量添加行2、自动随机打乱抽题顺序3、自动随机打乱选项顺序4、前后选项数量保持一致5、系统自动进行答题批改6、ABC答案不区分大小写7、复选框不区分单选、多选8、预计实现多选少选有效得分对于多项选择逻辑解读,需要的朋友请参阅官方文档:https://t6ixa9nyl6.jiandaoyun.com/sharedoc/7dca4jXgHiAiW3fi6wgqXb补充完善应用的搭建,与前文一样,请道友们熟悉主要应用的三个函数表达式:   1、INT(RAND()*(b-a)+a):获取一个大于等于 a 但小于 b 的随机整数 2、SPLIT(text, text_separator):将文本按指定字符串分割成数组并取出数组中第N个数据。   3、SEARCH(find_text,within_text,) 返回第一个文本字符串在第二个文本字符串中第一次出现的位置序号,从左到右查找,返回 0 则表示未查找到。 (约相当于子表单分行取数)   一、题库的建设参考图片,(全部单行文本也可以):https://ub35s32n7x.jiandaoyun.com/f/60bf88acd10ad1000802f8db 144356     二、答题页面建设参阅外链:https://ub35s32n7x.jiandaoyun.com/f/60bf7bf0808cd500081d5d03   方案一:固定四个选项设置   144475   随机数:INT(RAND()*题库+1) 试题:CONCATENATE(试卷.题干,CHAR(10),"--------------------",CHAR(10),"A、",SPLIT(试卷.选项,"-")-1],CHAR(10),"B、",SPLIT(试卷.选项,"-")-1],CHAR(10),"C、",SPLIT(试卷.选项,"-")-1],CHAR(10),"D、",SPLIT(试卷.选项,"-")-1]) 选项随机:UNION(SPLIT(CONCATENATE(INT(RAND()*4+1),",",INT(RAND()*4+1),",",INT(RAND()*4+1),",",INT(RAND()*4+1)),","),"1","2","3","4") 转换:"ABCD"-1] 标答、得分:我的答案建在另外一个标签内,为简便请请直接新增)标答联动题库,得分表达式:IF(答案.转换==答案.标答,答案.标准分值,0)   方案二:7个以内选项设置,(对比方案一,可扩展性强,表达式相对复杂,结合方案一方便理解思维,解读表达式) 对比方案一,字表单多了两个控件: 1、“题干随机序号”(主控件需要对应设置,目的去除重复随机数) 2、“选项数”(联动题库。目的是根据选项数生成对应随机个数)   方案二核心字表单控件名称展示: 144357 主要控件“试题”函数表达式:CONCATENATE(试卷.题干,CHAR(10),"☚✻✼❄❅❆❇❈❉❊☛",CHAR(10),"A、",SPLIT(试卷.选项,",")-1],CHAR(10),"B、",SPLIT(试卷.选项,",")-1],CHAR(10),"C、",SPLIT(试卷.选项,",")-1],IFS(试卷.选项数>=4,CONCATENATE(CHAR(10),"D、",SPLIT(试卷.选项,",")-1])),IFS(试卷.选项数>=5,CONCATENATE(CHAR(10),"E、",SPLIT(试卷.选项,",")-1])),IFS(试卷.选项数>=6,CONCATENATE(CHAR(10),"F、",SPLIT(试卷.选项,",")-1])),IFS(试卷.选项数>=7,CONCATENATE(CHAR(10),"G、",SPLIT(试卷.选项,",")-1]))) 144358 主要控件“选项随机”表达式:IFS(试卷.选项数==2,UNION(SPLIT(CONCATENATE(INT(RAND()*2+1),",",INT(RAND()*2+1)),","),"1","2"),试卷.选项数==3,UNION(SPLIT(CONCATENATE(INT(RAND()*3+1),",",INT(RAND()*3+1),",",INT(RAND()*3+1)),","),"1","2","3"),试卷.选项数==4,UNION(SPLIT(CONCATENATE(INT(RAND()*4+1),",",INT(RAND()*4+1),",",INT(RAND()*4+1),",",INT(RAND()*4+1)),","),"1","2","3","4"),试卷.选项数==5,UNION(SPLIT(CONCATENATE(INT(RAND()*5+1),",",INT(RAND()*5+1),",",INT(RAND()*5+1),",",INT(RAND()*5+1),",",INT(RAND()*5+1)),","),"1","2","3","4","5"),试卷.选项数==6,UNION(SPLIT(CONCATENATE(INT(RAND()*6+1),",",INT(RAND()*6+1),",",INT(RAND()*6+1),",",INT(RAND()*6+1),",",INT(RAND()*6+1),",",INT(RAND()*6+1)),","),"1","2","3","4","5","6"),试卷.选项数==7,UNION(SPLIT(CONCATENATE(INT(RAND()*7+1),",",INT(RAND()*7+1),",",INT(RAND()*7+1),",",INT(RAND()*7+1),",",INT(RAND()*7+1),",",INT(RAND()*7+1),",",INT(RAND()*7+1)),","),"1","2","3","4","5","6","7")) 选项随机支持7个以内选项,可以根据自己实际需要删减,注意理解数字对应关系。 由于选项随机,所以需要将选项结果做一个比对解读,“转换”控件表达式:IFS(ISEMPTY(试卷.单项选择)!=1,SPLIT(试卷.选项随机,","))。   我的答案建在另外一个标签内,如果一个标签内,可以直接赋值"得分“,完整表达式为IFS(IFS(ISEMPTY(试卷.单项选择)!=1,SPLIT(试卷.选项随机,","))==SEARCH(答案.标答,"ABCDEFG"),答案.标准分值), 控件”“题干”,“选项”,“选项数”,“标答”,“标准分值”,均为联动题库而来,随机数、题干随机序号公式参阅前面文档。单项选择为答题控件。   极简 极易 极完美,真正随机题库,完整链接体验:https://ub35s32n7x.jiandaoyun.com/f/60bf846ca0580d00075e3bd1 谢谢!
用基础知识,玩高级随机题库
灵活运用Rend函数,选项随机排序垂手可得 https://bbs.fanruan.com/thread-135687-1-1.html 已实现功能: 1、自动按出题数量添加行 2、自动随机打乱抽题顺序 3、自动随机打乱选项顺序 4、前后选项数量保持一致 5、系统自动进行答题批改 体验地址: https://ub35s32n7x.jiandaoyun.com/f/60b629d10de97c0008605174 编辑于 2021-6-6 23:16
灵活运用Rend函数,选项随机排序垂手可得
优化前面帖子功能:https://bbs.fanruan.com/thread-135687-1-1.html 优化后已实现功能如下: 1、自动按出题数量添加行 2、自动随机打乱抽题顺序 3、自动随机打乱选项顺序 4、前后选项数量保持一致(区间:2~5) 5、系统自动进行答题批改 https://ub35s32n7x.jiandaoyun.com/f/60b629d10de97c0008605174 特别鸣谢张明亮大神的指点。
灵活运用Rend函数,选项随机排序垂手可得
灵活运用Rend函数,选项随机排序垂手可得 随机题库,简道云模板市场安装即可运用。借助子表单,建立一个随机题库容易,但是要实现题干对应选项随机排序,很多生手百思不得入门,导致认为简道云不能达成这个目标,因而望而生畏。简道云社区也有一篇技术贴,《自建云函数+前端事件》,作者说解决很彻底。但是笔者是代码盲,凡是涉及代码的,动手能力近乎白痴,依葫芦画瓢依然不得其门。再者前端事件需要更强一点的动手能力,也只能膜拜大神和敬畏大神们将简道云运用得出神入画,佩服之至。 闲余下来,笔者仔细细思考,暮然回首,其实,灵活运用Rend函数,增添辅助控件,是很容易达成选项随机排序,从而构建相对理想的随机题库。 首先,复习帮助文档上的两个组合公式: 1、INT(RAND()*(b-a)+a):获取一个大于等于 a 但小于 b 的随机整数2、SPLIT(text, text_separator):将文本按指定字符串分割成数组并取出数组中第N个数据。 随即题库构建中,这两个个公式很重要,公式1用于“题干随机序号”和”选项随机”序号生成,公式2用于匹配随机序号的数组取数,都需要多次灵活并深入运用这两个公式。 其次,声明一下,笔者的解决方式依然是借助子表单,因此涉及到子表单随机行数的需求,如果还不会灵活解决的可以在简道云社区拜读一下相关帖子解决,这里不加以赘述。随机题库中题干的随机序号实现,本人也不再重复赘述,简道云模板市场安装后灵活变通既可以轻松实现。 以下为笔者构建的是选项随机排序操作步骤。 第一步:建立一个题库页面,题库的建设建议导入整理好的数据构建,页面大致如下: 144291144291https://ub35s32n7x.jiandaoyun.com/f/60b4b6475e881900073b1d5e file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml8728\wps1.jpg 第二步:借助数据工厂对题库进行加工。144292file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml8728\wps2.jpg 四个输入一致来源“题库”,注意每一个输入取舍对象,比如第一个输入只选A,字段设置1,增添项序1,依次类推字段设置2、3、4为项序2、3、4,数字便于生成的随机数联动对应选项。选项ABCD可忽略,实际用处不大。四个输入源一一对应四个字段设置好題序。最后数据工厂建立的效果如下:144293https://ub35s32n7x.jiandaoyun.com/dash/60b4bc140ce5e2000702923c file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml8728\wps3.jpgfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml8728\wps4.jpg 第三步:构建答题页面:144294file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml8728\wps5.jpg 截图中“题库”运用MAP函数获取最大值,“去重分布数”用于子表单“题干”的联动获取,这里不再介绍,可以参阅简道云官方文档随机题库建设:https://hc.jiandaoyun.com/blog/10948 着重展示下并简洁解释“随机取数”技术目标理论:IFS(ISEMPTY(题库)!=1,UNION(SPLIT(CONCATENATE(INT(RAND()*(5-1)+1),",",INT(RAND()*(5-1)+1),",",INT(RAND()*(5-1)+1),",",INT(RAND()*(5-1)+1)),","),"1","2","3","4",)) 1、为什么要用IFS函数?因为子表单控件需要触发才能显示数据,所以用IFS关联主控件实现触发。 2、为什么要加上1,2,3,4呢?随机函数是在一个区间内分布均匀随机取数,由于区间太小,重复率较高,且我们需要完全获取ABCD对应的題序,所以1234实际上是一个冗余数据设计,保证題序数虽随机但完整。 3、SPLIT、UNION函数SPLIT:将文本按指定字符串分割成数组,UNION:去除重复数组(即本文需求的重复数据) 4、INT(RAND()*(5-1)+1)获取一个大于等于1但小于5的随机整数,可以根据选项个数匹配。 5、UNION(SPLIT(CONCATENATE(INT(RAND()*(5-1)+1),",",INT(RAND()*(5-1)+1),",",INT(RAND()*(5-1)+1),",",INT(RAND()*(5-1)+1)),","),"1","2","3","4",)通过函数UNION去重后,构建一个1~4随机封闭循环数组合。可以根据选项个数变化数字“5”为具体选项数+1。实际运用中5-1可以直接赋值为4,不影响结果,但+1表示大于等于1的随机数,如果缺省,从0开始随机取数。 其它,A1、B2、C3、D4运用函数:SPLIT(填空题试卷.选项随机,",")A1值用表达式SPLIT(填空题试卷.选项随机,",")对应取数,其中A1==、B2==、C3==、D4==,请对应更换内数字。表达式表示将“选项随机”中的数组有序分解到A1、B2、C3、D4.ABCD对应的选项联动“数据工厂-答案”联动对应选项内容,注意对应项序A1、B2、C3、D4.file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml8728\wps6.jpg 注意:由于选项随机排序,所以最终还需要将答案对应的1234題序转换为正确的答案才能匹配标答。答案转换公式:IF(IF(试卷.答案=="A",试卷.A1,IF(试卷.答案=="B",试卷.B2,IF(试卷.答案=="C",试卷.C3,IF(试卷.答案=="D",试卷.D4," "))))=="1","A",IF(IF(试卷.答案=="A",试卷.A1,IF(试卷.答案=="B",试卷.B2,IF(试卷.答案=="C",试卷.C3,IF(试卷.答案=="D",试卷.D4," "))))=="2","B",IF(IF(试卷.答案=="A",试卷.A1,IF(试卷.答案=="B",试卷.B2,IF(试卷.答案=="C",试卷.C3,IF(试卷.答案=="D",试卷.D4," "))))=="3","C",IF(IF(试卷.答案=="A",试卷.A1,IF(试卷.答案=="B",试卷.B2,IF(试卷.答案=="C",试卷.C3,IF(试卷.答案=="D",试卷.D4," "))))=="1","D"," "))))本表达式穷举了选项个数为4的匹配,其它选项个数匹配在此基础上增减。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml8728\wps7.jpg最后,联动出标答和答案分值赋分。144295得分函数:IF(试卷.转换==试卷.标答,试卷.标准分值,"0")144296file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml8728\wps8.jpg 通过取消勾选可见设置,和进一步美化页面,实现最终需要展现的页面。页面中“试题题干”用多行文本稍许加工,用于实现相对美好和标准统一的页面内容。 注意:由于本文是基础指导示范,实际运用中,如果将标答展示在同一页面,PC端通过浏览器修改CSS属性,可以控制页面隐藏属性,从而获得开挂效果,所以,建议将标答用多标签页面集合隐藏并赋分。由于涉及多个转换,这里也不在赘述。(特别鸣谢岑俊杰老师在实际运用中的指导) 最后简洁描述下应用的技术手段和能达到的效果:应用重复利用子表单和随机函数,用于从事先设置好的题库中随机抽取试题,试题选项随机排序,具有自动批改计算分数;主要知识点:1、从题库中获取题目总数量;2、生成随机从1到题库总数的一系列随机数(剔除重复数字);3、按照随机序号排列赋值子表单后从题库中联动试题题干及随机选项;5、利用单选按钮进行作答;6、通过判断用户作答与题库中正确答案序号是否一致来判定分数;7、自定义提交页面,显示分数还可补充功能:记录错题并提交后展示错题、超时不允许提交、起止时间设置等功能。 通过如上步骤,一个简单实用的选项随机排序随机题库构建完成! 效果页面:https://ub35s32n7x.jiandaoyun.com/f/60b476049435920008944768 如有叙述不到位,欢迎沟通并指正。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml8728\wps9.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml8728\wps10.jpg钉钉==微信:15983762326 编辑于 2021-6-6 18:59 编辑于 2021-6-7 23:53 编辑于 2021-6-8 00:03 编辑于 2021-6-8 00:08
个人成就
内容被浏览25,707
加入社区3年59天
返回顶部