yhdata_QifoXPD3青铜一
2025-3-15 11:37:35 发布在问答
关于填报时给一行的某一列赋值默认值
本帖最后由 yhdata_QifoXPD3 于 2025-3-15 11:51 编辑

在填报时,想要在点击按钮新增一行时,自动给这一行的第一列赋值一个uuid,提交时运行脚本如下,结果并没有生效,请问如何实现呢

var data = getData("门禁守护项填报", DATA);
if(data.get(data.size(),1) == null) {
    var uuid = generateUUID()
    data.set(data.size(),1,uuid);
}

function generateUUID() {
  // 生成 128 位随机十六进制字符
  var d = new Date().getTime();
  if (typeof performance !== 'undefined' && typeof performance.now === 'function') {
    d += performance.now(); // 增加高精度时间戳
  }

  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy/g, function(c) {
    const r = (d + Math.random() * 16) % 16 | 0;
    d = Math.floor(d / 16);
    return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);
  });
}




181
2
精彩评论2
永洪tech-程前玄铁三
发表于 2025-3-16 15:36:40 显示全部楼层
从你的描述来看,你希望在新增一行时,自动为这一行的第一列赋值一个 UUID,并在提交时运行脚本。然而,你的脚本似乎没有生效。以下是一些可能的原因和改进建议:
1. 问题分析
1.  data.get(data.size(), 1) 的问题
•  data.get(data.size(), 1) 可能无法正确获取新增行的数据,因为 data.size() 是当前数据的总行数,而新增行可能尚未被正确初始化。
•  如果新增行的默认值为空,data.get(data.size(), 1) 可能会返回 undefined 或抛出异常。
2.  generateUUID 函数的问题
•  你的 generateUUID 函数中,正则表达式 [xy/g 有语法错误,应该是 /[xy]/g。
•  此外,performance.now() 在非浏览器环境中可能不可用,这可能导致代码在某些环境下无法正常运行。
3.  data.set 的问题
•  data.set(data.size(), 1, uuid) 可能无法正确设置值,因为 data.size() 返回的是当前数据的总行数,而不是新增行的索引。
2. 改进后的脚本
以下是修正后的脚本,确保在新增行时为第一列赋值 UUID:
var data = getData("门禁守护项填报", DATA);

// 检查新增行是否为空
if (data.get(data.size() - 1, 1) == null) {
    var uuid = generateUUID();
    data.set(data.size() - 1, 1, uuid); // 在新增行的第一列赋值 UUID
}

function generateUUID() {
    // 生成 128 位随机十六进制字符
    var d = new Date().getTime();
    if (typeof performance !== 'undefined' && typeof performance.now === 'function') {
        d += performance.now(); // 增加高精度时间戳
    }

    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
        const r = (d + Math.random() * 16) % 16 | 0;
        d = Math.floor(d / 16);
        return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);
    });
}

3. 关键改进点
1.  修正正则表达式
将 [xy/g 改为 /[xy]/g,以确保正则表达式正确。
2.  修正新增行索引
使用 data.size() - 1 来获取新增行的索引,因为新增行的索引应该是当前数据行数减 1。
3.  检查新增行是否为空
使用 data.get(data.size() - 1, 1) 来检查新增行的第一列是否为空。
4. 其他注意事项
•  确认 getData 和 data.set 的实现
确保 getData 和 data.set 是正确的 API,并且它们支持你期望的操作。
•  测试环境
如果你的代码运行在非浏览器环境(如 Node.js),performance.now() 可能不可用。可以移除这部分代码,或者使用其他高精度时间戳生成方法。
•  调试日志
如果脚本仍然没有生效,建议在关键位置添加调试日志,例如:
console.log("当前数据行数:", data.size());
console.log("新增行的第一列值:", data.get(data.size() - 1, 1));
console.log("生成的 UUID:", uuid);

通过这些改进,你的脚本应该能够正确为新增行的第一列赋值 UUID。如果仍有问题,请提供更多上下文信息,例如 getData 和 data.set 的实现细节,以便进一步排查。
回复

使用道具 2#

yhdata_QifoXPD3青铜一 回复永洪tech-程前玄铁三
发表于 2025-03-17 14:21:47
目前来看是data.set(data.size(),1,uuid)没有成功
回复

高级模式
您需要登录后才可以回帖 登录 | 免费注册

  • 官方微信

    欢迎关注永洪服务号!收费为0,价值无限

    扫码关注
  • 新浪微博

    让每位用户轻松挖掘数据价值!

    访问新浪微博
  • 智能客服
100W

用户等你来哦

Copyright   ©2012-2025  北京永洪商智科技有限公司  (京ICP备12050607) 京公网安备110110802011451号 |《永洪社区协议》
返回顶部