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;}