循环播放工作表,重新排列范围/数组并将其写入新工作表

时间:2016-02-03 16:04:47

标签: google-apps-script

我有一个电子表格,我想获取一系列数据并对其进行操作以使其外观不同。我在想我会设置多个循环

1 - 获取主要学生数据(A2:I26)并将其添加到新工作表中。

2-然后循环测试标题的范围,例如。 A,B,C等,并添加学生详细信息。

3-然后另一个循环来获取每个测试标题下的分数范围,并在测试名称后添加它们。

我开始编写一个获取工作表范围等的脚本,但我不确定如何添加循环。

仅供参考 - 我需要转换的一些表格的分数比只有A,B,C的分数更多...我需要处理的一些表格可能只有A分数,有些可能有AE等分数。

感谢您提供的任何帮助。

布兰登

***下面的图片和简单的脚本

我希望看一下这样的表格: enter image description here

使用脚本使其看起来像这样:

enter image description here

{{1}}

1 个答案:

答案 0 :(得分:0)

我似乎找到了答案,所以我想我会发布它。相应地重新排列纸张的循环看起来像这样。我确信有更快的方法,但这就是我想出来的。



function dataReport() {

   var thisSS = SpreadsheetApp.getActiveSpreadsheet(),
       classData = thisSS.getSheets()[3],
       dataLastRow = classData.getLastRow(),
       Avals = classData.getRange("A1:A").getValues(),
       Alast = Avals.filter(String).length,

       classDataRange = classData.getRange(3, 1,Alast, 9), 
       
       standardCols = classData.getRange("J2:2").getValues(),
       arrayOfStandards = standardCols.join().split(","),
       filtArr = arrayOfStandards.filter(Boolean);
       
       var dataArray = classDataRange.getValues();

    for(var i=0; i < filtArr.length; i++){   
    
        var reportSheet = thisSS.getSheets()[4];
        var reportSheetNewRow = reportSheet.getLastRow() +1;
        var newDataRange = reportSheet.getRange(reportSheetNewRow, 1,Alast, 9);
        
        var avgValues = classData.getRange(3, 10+i, Alast, 1);
        var avgArray = avgValues.getValues();
        var newAvgRange = reportSheet.getRange(reportSheetNewRow, 11,Alast, 1);

        newDataRange.setValues(dataArray);
        newAvgRange.setValues(avgArray); 
         
        for (var j=0, x = dataArray.length; j<x; j++){
        
            reportSheet.getRange(reportSheetNewRow + j, 10).setValue(filtArr[i]);
    }
  }
}
&#13;
&#13;
&#13;