为啥 .setValue() 在 for 循环中跳过列?

Posted

技术标签:

【中文标题】为啥 .setValue() 在 for 循环中跳过列?【英文标题】:Why is .setValue() in for-loop skipping columns?为什么 .setValue() 在 for 循环中跳过列? 【发布时间】:2019-12-17 17:16:12 【问题描述】:

我在 Appscript 中有这个网络应用程序,它从 Siri Shortcuts 的 POST 请求中接收信息。

function doPost(e) 
  
  //Get active spreadsheet and input database tab name.
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Test02');
  
  if(typeof e !== 'undefined')
    //Retrieve data received and make a string.
    var data = JSON.stringify(e);
  
    //1st print. Print string on new row.
    sheet.getRange(sheet.getLastRow()+1,1).setValue(data);
  
    //Eliminate all special characters coming from Siri Shortcuts POST request.
    data = data.replace(new RegExp(["\\\\"], 'g'), "");
    data = data.replace(new RegExp('"', 'g'), "");
    data = data.replace(new RegExp("", 'g'), "");
    data = data.replace(new RegExp("", 'g'), "");
    data = data.replace(new RegExp(":", 'g'), "");
  
    //Split all info on the left side of the first parameter and on the right side of the second.
    data = data.split('Log')[1];
    data = data.split("name")[0];

    //2nd print. Print clean string on a new row.    
    sheet.getRange(sheet.getLastRow()+1,1).setValue(data);  
     
    //3rd print. Print all array element on row. End goal is to have them start from column A and keep adding 1 column every loop.
    //Split string into array.
    var dataArray = data.split(",");
    var lastRow = sheet.getLastRow()+1;
    for(var i = 0; i < dataArray.length; i++) 
      //3rd print, first part. This tests the real data.
      sheet.getRange(lastRow,1+[i]).setValue(dataArray[i]);
      //3rd print, second part. This tests the index number to try and find why row are being skipped.
      sheet.getRange(lastRow+1,1+[i]).setValue([i]);
    
  
    //Use Mail app to send mail after completion.  
    MailApp.sendEmail("abc123@gmail.com","InningLogger - Test", data); 
    
    return;
  

附件是我在电子表格中得到的结果。

第 3 行和第 7 行有两个问题:

    为什么数据不是从 A 列开始? 为什么第 7 行跳过了一吨 列(我将它们隐藏以获取屏幕截图)以打印最后 3 价值观?

谢谢!

【问题讨论】:

你想要1+[i] 是什么意思?因为i 是代码中的数字,比如3,所以1+[i] 将是字符串“13”,而不是数字。 啊!我怎么能解决这个问题?我的意图是使用 [i] 作为索引来设置确定 .setValue() 范围的列号。 如果i 是数字3,那么1 + i 是数字4。[ ] 创建一个数组,然后在评估1+[i] 时将其转换回字符串。 是的!它现在正在工作,非常感谢!只是将 1+[i] 更改为 [i+1]。您想回答这个问题还是我应该将您的第一条评论复制到答案中? 【参考方案1】:

正如@Pointy 提到的,问题出在 for 循环中的 1+[i] 中。 “因为 i 是代码中的数字,比如 3,1+[i] 将是字符串“13”,而不是数字。将其更改为 [i+1] 完全解决了问题。

【讨论】:

以上是关于为啥 .setValue() 在 for 循环中跳过列?的主要内容,如果未能解决你的问题,请参考以下文章

在jquery中跳过循环中的数字

为啥 Falcor 的 setValue() 不适用于外部模型?

如何在循环中跳过项目

Scanf 在循环中跳过(Hangman)

如何在 ddd (gdb) 中跳过过去的循环

为啥在 for 循环之后比 for 循环之前慢得多?