在循环中使用 setValue() 会返回“未捕获的错误”

编码_is_hard

我试图在按下表单上的提交后更新我的工作表。提交后,页面不会迭代剩余的命令,并且会在控制台上显示错误“在 updateMan (Server:67) (Easy Roster) 3bf79b2b-341b-490f-87a8-b293d7ded973 中未捕获”。但是当我检查我的工作表时,这些值肯定会更改为我为每个单元格设置的新值。错误来自哪里,我该如何解决?

//server side
function updateMan(data)
{ 
  var ss = SpreadsheetApp.openByUrl(url);
  var sheet = ss.getSheetByName("Easy Roster");
  var length = data.length;

  for (var i = 0; i < length; i++)
  {
    var max = length - 1;
    var row = data[i] + 1;
    var newMan = data[max];
    sheet.getRange(row, 5).setValue(newMan);
  }

  return length;
}
//front-end
  function updateData(e)
  {
    e.preventDefault();

    var checkedRows = [];

    var nRows = document.getElementById("tableBody").childNodes.length;


    for (var i = 1; i < nRows; i++)
    {
      var checkbox = document.getElementById(i);

      if (checkbox.checked)
      {
        var row = document.getElementById("row" + i).childNodes;
        row[5].text == e.target["newManField"].value; 
        checkedRows.push(i);
      }
    }

    checkedRows.push(e.target["newManField"].value);

    console.log(checkedRows); 

    google.script.run
      .withSuccessHandler(updateAlert)
      .updateMan(checkedRows);
  }

  function updateAlert(data)
  {
    console.log(data);
    alert("Employee details have been updated.");
    window.open("link_to_page", '_top');  
  }

德莫林

错误是您最后一次调用sheet.getRange(row, 5).setValue(newMan)是使用字符串fromdata[max]与“1”连接到它。在循环之前从数组中删除最后一个元素。

这是一个修改后的版本updateMan,应该在功能上等效,但没有错误。

/**
 * @param {mixed[]} data - list of row numbers, zero-indexed,
 *   final array element is a string
 */
function updateMan(data) { 
  var ss = SpreadsheetApp.openByUrl(url);
  var sheet = ss.getSheetByName("Easy Roster");
  var length = data.length;  
  var newMan = data.pop(); // removes "newMan" from array

  data.forEach(function (row) { 
    sheet.getRange(row + 1, 5).setValue(newMan);
  });

  return length; // length prior to the pop - check if that's what you want
}

在您的客户端代码中,您发布的内容似乎是一个错字(尽管它与来自服务器的错误无关):

row[5].text == e.target["newManField"].value; // comparison that does nothing

我想你应该是

row[5].textContent = e.target["newManField"].value; // assign some text content

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在[for]循环中使用返回值

在循环中使用StreamWriter时出现“ Stream not Writable”错误

在for循环中使用Sklearn的LabelEncoder错误

从for循环中捕获变量,以供以后在QPushButton中使用

在pysnmp中使用setValue

在熊猫循环中使用.head()会降低性能

Continue在if语句中无法在for循环中使用(“ continue”在循环中未正确进行)

在for循环中使用隐式参数会导致挂起

在for循环中使用if ... else返回字符串

在for eachrow循环中使用变量会导致错误

Lambda在for循环中使用时传递错误的参数

为什么在循环中使用$ v0寄存器会返回错误的输出?

在foreach循环中使用异步查询返回文档

在for循环中使用random会产生奇怪的值

在循环中使用ffmpeg时出现奇怪的错误

在基于范围的for循环中使用的方法返回容器

在循环中的内联if语句中使用break会导致语法错误

在while循环中使用SSH会丢失属性值

for循环中的ZSH列表变量名会导致错误,但可以在BASH中使用

循环中使用SQL查询的自动化错误

无法在elixir的循环中使用Agent返回的值

在循环中使用getline()时出现分段错误

在循环中使用时 zip 输出在错误的位置

在 for 循环中使用 fprintf 会提供错误的值

在循环中使用模数会导致分段错误(核心转储)

在 FOR 循环中使用 FORFILES 并尝试覆盖错误

在循环中使用 promise 会导致 Promise 失败

从方法中获取返回值以在 for 循环中使用

在 v-for 循环中使用 v-autocomplete 会导致无限循环