我們的一所高中正嘗試爲當前失敗一個或多個班級的學生創建每週報告。報告格式如下。如何將數據追加到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