无法区分大小写验证数据及展示电子表格全量数据问题求助
解决方案:区分大小写验证与全数据展示修复
问题1:无法实现区分大小写的数据验证
当前代码使用==做字符串比对,会触发隐式类型转换且无法严格区分大小写。要实现精准的区分大小写验证,需修改比对逻辑:
修改代码
将searchAllData中的判断条件替换为:
if (dataMaterial[row][0] === id) {
说明
===是严格相等运算符,会同时比对值和数据类型,字符串比对时严格区分大小写,完全满足区分大小写的验证需求。
问题2:无法展示电子表格中的全部数据
当前searchAllData仅筛选第一列等于传入id的行,但管理员调用时传入的是'id admin',表格中无匹配行,导致无数据展示。需调整逻辑让管理员能获取所有数据:
修改代码
更新searchAllData函数的完整逻辑:
function AmbilMaterial() { var rangeName = 'Name Sheet!A2:F'; var rows = Sheets.Spreadsheets.Values.get(SheetID, rangeName).values; return rows; } // 补充缺失的闭合括号 function searchAllData(id) { var dataMaterial = AmbilMaterial(); var num = 1; const data = []; // 管理员模式显示专属标题,非管理员显示原日期筛选标题 var header = id === 'id admin' ? '<b>Semua Data Material</b>\n\n' : '<b>Data Material</b>\n\nAwal Tanggal :<b>' + id + '</b>\n\n'; var th = '- - - - - - - - - - - - - - - - - \n' + '<b>No. |Nama Lengkap|NIK|Material|Satuan|Tanggal</b> \n' + '- - - - - - - - - - - - - - - - - \n'; for (var row = 0; row < dataMaterial.length; row++) { // 管理员模式跳过筛选,直接加入所有行;非管理员按日期严格匹配 if (id === 'id admin' || dataMaterial[row][0] === id) { var resi = num++ + '.' + dataMaterial[row][1] + ' | ' + dataMaterial[row][2] + ' | ' + dataMaterial[row][3] + ' | ' + dataMaterial[row][4] + ' | <b>' + dataMaterial[row][0] +'</b>\n\n'; data.push(resi); } } var gabung1 = header + th + data; var clearKoma1 = gabung1.toString(); var dataBaru1 = clearKoma1.replaceAll(',', ''); return dataBaru1; }
说明
- 补充
AmbilMaterial函数缺失的闭合括号,修复语法错误 - 新增管理员模式判断:传入
'id admin'时,循环直接遍历所有行并加入结果 - 同步调整标题文本,让管理员模式的展示更准确
- 保留非管理员的筛选逻辑,同时改用严格相等运算符保证区分大小写验证
额外小修复
原验证代码存在笔误:定义了提示文本变量show,但调用sendText时传入了未定义的cabutan,需修正:
sendText(updates.message.chat.id, show); // 将cabutan改为show
内容的提问来源于stack exchange,提问作者Newbie
相关产品推荐
相关产品推荐

