Javascript 除了最外层的循环外,还有多个循环可以工作
我有一个脚本可以执行以下操作 从最内层到最外层:Javascript 除了最外层的循环外,还有多个循环可以工作,javascript,loops,google-apps-script,google-sheets,increment,Javascript,Loops,Google Apps Script,Google Sheets,Increment,我有一个脚本可以执行以下操作 从最内层到最外层: 迭代每个对象属性。(以英语发言) 迭代包含对象的每个列 for (var i=0; i < col-5; i++) { var json = sheet.getRange(arr[m-1],i+6).getValue(); //First value should be row position from VLOOKUP. var jsobj = JSON.parse(json); 我有一个封闭的循环,它将为“m”生成一个值数组
for (var i=0; i < col-5; i++) {
var json = sheet.getRange(arr[m-1],i+6).getValue(); //First value should be row position from VLOOKUP.
var jsobj = JSON.parse(json);
我有一个封闭的循环,它将为“m”生成一个值数组
var arr=[];
对于(变量y=0;y
前两个最里面的循环按预期工作,但我似乎无法使它在外循环中工作。我将在下面提供电子表格的副本和完整代码:
function createTable() {
var doc = SpreadsheetApp.openById("1Jv3E51r5zMuMLmn0qkCRjQBBRJHK_QTSdOeCSLRG7Do");
var sheet = doc.getSheetByName("json");
var sheet2 = doc.getSheetByName("tabla de frecuencias");
var sheet7 = doc.getSheetByName("tf2");
//Variable framework
var prelast = sheet.getRange("A1:A").getValues();
var last = prelast.filter(String).length;
var folio = sheet.getRange(last,3).getValue();
var folios = sheet.getRange("D1:D").getValues();
var range = sheet.getRange("C1:C");
var name = sheet.getRange(last,4).getValue();
var sheets = [sheet2,sheet7];
var counter = -1
var col = sheet.getLastColumn();
var arr = [];
for (var y = 0; y < folios.length; y++) { //This creates an array for later use.
if(folios[y] == name){
arr.push(y);
}
}
var item = arr.length;
for (var m=item; m > 0; m--) { //This is the loop that is not working.
counter++ //When the first iteration completes, this should increase for later use.
for (var i=0; i < col-5; i++) { //This and the below loop work as intended.
var json = sheet.getRange(arr[m-1],i+6).getValue(); //This is a critical point where M decreases its value all the way to 0 to fetch an entire row from my JSON sheet. It works in testing only for one row. I want it to go through each row in the array and write the values on different sheets, or even in the same sheet.
var jsobj = JSON.parse(json);
for (var j in jsobj) { //Works!
var headerRow = Object.keys(jsobj).sort();
var row = headerRow.map(function(key){ return jsobj[key]});
var contents = [row];
var headers = [headerRow];
sheets[counter].getRange(1+i, 1, contents.length, headerRow.length ).setValues(contents); //Let me explain: var sheets contain an array of two sheets, I want the script to write over each sheet based on the outermost loop.
}
}
}
函数createTable(){
var doc=电子表格应用程序.openById(“1Jv3E51r5zMuMLmn0qkCRjQBBRJHK_QTSdOeCSLRG7Do”);
var sheet=doc.getSheetByName(“json”);
var sheet2=文件getSheetByName(“频率表”);
var sheet7=doc.getSheetByName(“tf2”);
//可变框架
var prelast=sheet.getRange(“A1:A”).getValues();
var last=prelast.filter(String).length;
var folio=sheet.getRange(最后一个,3.getValue();
var folios=sheet.getRange(“D1:D”).getValues();
var范围=sheet.getRange(“C1:C”);
var name=sheet.getRange(最后一个,4.getValue();
风险值表=[sheet2,sheet7];
变量计数器=-1
var col=sheet.getLastColumn();
var-arr=[];
对于(var y=0;y0;m--){//这是不起作用的循环。
计数器+++//当第一次迭代完成时,该值应增加以供以后使用。
对于(vari=0;i
最后是我的电子表格
感谢您的光临。您的问题在第一次循环中失败。
col
是电子表格中的最后一列索引,在json表中的所有行中,这是空的,并且试图将空字符串解析为json会破坏脚本
在var json=sheet.getRange(最后一个,i+6).getValue();
或您的arr[m]
选项之后,您需要检查字符串是否为空,如果为空,请中断或继续
if (json === "") {break;}
这样做之后,它就失败了,因为它尝试写入第三个工作表,因为有3个instalaciones行,但只有两个工作表需要写入。您的问题在第一次循环中失败。
col
是电子表格中的最后一列索引,在json表中的所有行中,这是空的,并且试图将空字符串解析为json会破坏脚本
在var json=sheet.getRange(最后一个,i+6).getValue();
或您的arr[m]
选项之后,您需要检查字符串是否为空,如果为空,请中断或继续
if (json === "") {break;}
这样做之后,它就失败了,因为它尝试写入第三个工作表,因为有3个instalaciones行,但只有两个工作表可以写入。这是大量代码,而您的电子表格有更多的代码,您能否尝试创建一个最小的可复制示例?我已对电子表格和其中的脚本进行了清理,使其仅包含e相关部分。这是很多代码,而您的电子表格中有更多代码,您能尝试创建一个最小的可复制示例吗?我已对电子表格和其中的脚本进行了消毒,使其仅包含相关部分。非常有效!我可以为此添加额外的工作表。非常感谢。非常有效!我可以为此添加额外的工作表。谢谢非常感谢你。
function createTable() {
var doc = SpreadsheetApp.openById("1Jv3E51r5zMuMLmn0qkCRjQBBRJHK_QTSdOeCSLRG7Do");
var sheet = doc.getSheetByName("json");
var sheet2 = doc.getSheetByName("tabla de frecuencias");
var sheet7 = doc.getSheetByName("tf2");
//Variable framework
var prelast = sheet.getRange("A1:A").getValues();
var last = prelast.filter(String).length;
var folio = sheet.getRange(last,3).getValue();
var folios = sheet.getRange("D1:D").getValues();
var range = sheet.getRange("C1:C");
var name = sheet.getRange(last,4).getValue();
var sheets = [sheet2,sheet7];
var counter = -1
var col = sheet.getLastColumn();
var arr = [];
for (var y = 0; y < folios.length; y++) { //This creates an array for later use.
if(folios[y] == name){
arr.push(y);
}
}
var item = arr.length;
for (var m=item; m > 0; m--) { //This is the loop that is not working.
counter++ //When the first iteration completes, this should increase for later use.
for (var i=0; i < col-5; i++) { //This and the below loop work as intended.
var json = sheet.getRange(arr[m-1],i+6).getValue(); //This is a critical point where M decreases its value all the way to 0 to fetch an entire row from my JSON sheet. It works in testing only for one row. I want it to go through each row in the array and write the values on different sheets, or even in the same sheet.
var jsobj = JSON.parse(json);
for (var j in jsobj) { //Works!
var headerRow = Object.keys(jsobj).sort();
var row = headerRow.map(function(key){ return jsobj[key]});
var contents = [row];
var headers = [headerRow];
sheets[counter].getRange(1+i, 1, contents.length, headerRow.length ).setValues(contents); //Let me explain: var sheets contain an array of two sheets, I want the script to write over each sheet based on the outermost loop.
}
}
}
if (json === "") {break;}