0

다음 작업을 수행하는 스크립트가 있습니다.가장 바깥 쪽 루프를 제외한 다중 루프 작동

최 내측에에서 :

  1. 로 반복 위에 각 속성을 오브젝트. (in)! 이 시점에서 현재 오브젝트

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

함유 각 열 위에

for (var j in jsobj) { 
       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); 
    } 
  • 반복 처리는, I가 다른 루프를 실행하려면, VAR의 m은 서로 다른 결과를 제공한다 따라서 변화하는 값이고.

    for (var m=item; m > 0; m--) { 
    
    counter++ 
    

    "m"에 대한 값 배열을 생성하는 폐 루프가 있습니다.

    var arr = []; 
         for (var y = 0; y < folios.length; y++) { 
         if(folios[y] == name){ 
          arr.push(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. 
    
         } 
    
    
         } 
    
    
        } 
    

    마지막으로 내 스프레드 시트. 들러

    https://docs.google.com/spreadsheets/d/1Jv3E51r5zMuMLmn0qkCRjQBBRJHK_QTSdOeCSLRG7Do/edit?usp=sharing

    감사합니다.

  • +0

    이것은 많은 코드이며 스프레드 시트는 더 많은 코드를 가지고 있습니다. 최소한의 재현 가능한 예제를 만들 수 있습니까? –

    +0

    관련 부분 만 포함하도록 스프레드 시트와 스크립트 내부를 살균했습니다. –

    답변

    2

    루프의 첫 번째 반복 내에서 오류가 발생하는 문제.
    col은 스프레드 시트의 마지막 열 인덱스이며 json 시트의 모든 행에서이 열은 비어 있으며 JSON이 스크립트를 중단 할 때 빈 문자열을 구문 분석하려고합니다.

    var json = sheet.getRange(last,i+6).getValue(); 또는 arr[m] 대체 후 문자열이 비어 있는지 확인하고 중단하거나 계속해야합니다. 그 다음 세 번째 시트에 기록하려고하기 때문에 쓸 수있는 3 INSTALACIONES 행 만이 시트가 있기 때문에 그냥, 실패하고 후

    if (json === "") {break;} 
    

    .

    +0

    Excelent 작동했습니다! 나는 그것에 대한 여분의 시트를 추가 할 수 있습니다. 정말 고맙습니다. –