为啥 .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 循环中跳过列?的主要内容,如果未能解决你的问题,请参考以下文章