我们的一所高中正尝试为当前失败一个或多个班级的学生创建每周报告。报告格式如下。如何将数据追加到Google Apps脚本的行尾
如果学生失败多个班级,信息是在不同的行。这些信息需要合并,每个学生在一列中 - 第1列是名称,随后的列是针对年级/班级/教师的信息。
目前,我有代码删除空白工作表,创建一个标题为“输出”的新工作表,写入标题行,并在第1列中写入唯一名称(部分注释掉,因此不会创建重复的“输出”片每次):
function copyRows() {
//Initialize variables
var ss = SpreadsheetApp.getActiveSpreadsheet();
var dataSheet = ss.getSheetByName("Sheet1");
/*
//Create output Sheet
ss.insertSheet("Output");
*/
var writeSheet = ss.getSheetByName("Output");
/*
//Delete unwanted columns (1, 3, 4, 7, 9)
dataSheet.deleteColumn(1); //Deletes first column
dataSheet.deleteColumn(2); // Deletes third column (because it shifts after every deletion)
dataSheet.deleteColumn(2); //Deletes fourth column
dataSheet.deleteColumn(4); //Deletes 7th column
dataSheet.deleteColumn(5);//Deletes 9th column
//Delete unwanted Sheets
var deleteSheet2 = ss.getSheetByName("Sheet2");
var deleteSheet3 = ss.getSheetByName("Sheet3");
ss.deleteSheet(deleteSheet2);
ss.deleteSheet(deleteSheet3);
//Write data to header row
var headerRange = writeSheet.getRange("A1:V1");
var headerValues = [
["name", "class1", "grade1", "teacher1","class2", "grade2", "teacher2","class3", "grade3", "teacher3","class4", "grade4", "teacher4","class5", "grade5", "teacher5","class6", "grade6", "teacher6","class7", "grade7", "teacher7"]
]
headerRange.setValues(headerValues);
*/
var lastRow = dataSheet.getLastRow();
var mainArray = dataSheet.getRange(1, 1, lastRow, 4).getValues();
var allNames = []; //List of all names, including duplicates
var uniqueNames = []; //List of all unique names
for (i = 0; i < mainArray.length; i++) { //Sets allNames
allNames.push(mainArray[i][0]);
}
for (i = 0; i < allNames.length; i++) { //Sets uniqueNames
if (allNames[i+1] != allNames[i]) {
uniqueNames.push(allNames[i]);
}
}
var uniqueNamesArray = uniqueNames;
//New method that converts 1d array to 2d array
Array.prototype.reshape = function(rows, cols) {
var copy = this.slice(0); // Copy all elements.
this.length = 0; // Clear out existing array.
for (var r = 0; r < rows; r++) {
var row = [];
for (var c = 0; c < cols; c++) {
var i = r * cols + c;
if (i < copy.length) {
row.push(copy[i]);
}
}
this.push(row);
}
};
var uniqueNamesRow = uniqueNames;
uniqueNames.reshape(uniqueNames.length, 1); //Changing uniqueNames from row to column
var writeNamesRange = writeSheet.getRange(2,1,uniqueNames.length,1); //writeSheet column 1
writeNamesRange.setValues(uniqueNames);
示例数据:
- 院长John Doe的50个波段先生
- 玛丽·史密斯60美国历史琼斯女士
- 玛丽小号MITH 25化学Dyar女士
- 玛丽·史密斯40代数2哈里斯女士院长
- 拉里·琼斯22代数2哈里斯女士
随着输出
玛丽·史密斯60美国历史琼斯女士
李四50个波段先生25化学Dyar 40代数女士2哈里斯女士
鲍勃·米勒55乐队先生院长
- 拉里·琼斯22代数2哈里斯女士
需要注意的是玛丽·史密斯的数据被组合成一排。
我只是无法弄清楚如何遍历行并将数据追加到相应行的末尾。
对不起以前缺乏的细节,并感谢您的反馈意见。
尝试更具体地了解问题,您拥有的数据,您编写的代码而不是解释学校情况,并且不链接外部文档。欢迎来到堆栈溢出 –
有许多Stack Overflow会员想要帮助你,并同情你的情况。通过发布一个问题,已经有一个需要的假设。从你的名誉1我们可以看到你在这里是新的。如果可以隔离导致问题的一行代码或一小段代码,则提供帮助会更容易。 –
你想让你的输出看起来像什么?失败的标准是什么?你有没有能够唯一识别每个人的学生号码? – Cooper