Wie verwende ich setValues() zum einfügen der Daten bekam ich von getValues()? Google Spreadsheet
So, ich habe schlug meinen Kopf über diese und kann nicht scheinen, um wickeln Sie meinen Kopf herum, 2D-arrays. Ich habe folgenden code, aber bin nicht in der Lage zu bekommen setValues()
zu arbeiten (Das Ende des Codes.)
Ich bin mir ziemlich sicher, dass ich brauchen, um es einzurichten als ein array, aber jede Weise, die ich habe versucht, es einzurichten, führte zu einer anderen Fehlermeldung. Wie kann ich richtig den code schreiben, damit die Fehlermeldungen.
function onSearch() {
var sheetID = DriveApp.getFilesByName('Dash').next().getId();
var ss = SpreadsheetApp.openById(sheetID);
var sheet = ss.getSheetByName("Master List");
//Loop through Class List, get Course Codes
var classes = ss
.getSheetByName("sheetInfo")
.getRange(1, 2, 3)
.getValues();
//Loop through courses
for (var k = 0; k < classes.length; k++) {
var classCode = classes [k];
var searchVal = classCode;
var column = 18;
//Get Course Sheets
var classSheetArray = ss.getSheetByName("sheetInfo")
.getRange(1, 1, 3)
.getValues();
var classSheetName = classSheetArray [k];
var classSheet = ss.getSheetByName(classSheetName);
//Insert headers into Class sheets
sheet.getRange(1, 1, 1, 17).copyTo(classSheet.getRange(1, 1, 1, 17));
//Loop through 9 different course codes from student timetable
for (var j = 0; j < 9; j++) {
var searchCol = sheet.getRange(2, column+j, sheet.getLastRow())
.getValues();
for (var i = 0, len = searchCol.length; i < len; i++) {
//Take the data from the search and place it in the corresponding class tab.
//This data will have 17 columns and the number of rows is dependent on the number of returned students.
if (searchCol[i][0] == searchVal) {
var lastRow = classSheet.getLastRow();
var sourceInfo = sheet.getRange(i+2, 1, 1, 17)
.getValues();
tempArray = [];
tempArray.push(sourceInfo[i]);
Logger.log(tempArray); //WHEN I LOG THE ARRAY THE DATA LOOKS LIKE [[col 1, col 2 ...]][[col 1, col 2 ...]]...
classSheet.getRange(lastRow+1,1,1,sourceInfo.length) //DEFINITELY KNOW THIS TO BE WRONG...
.setValues(tempArray[0][i]);
}
}
}
}
}
InformationsquelleAutor S. Roberts | 2016-02-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Derzeit in Ihrem code, die Länge des
sourceInfo
ist immer 1:Die syntax für
getRange
mit 4 Argumenten:Die Anzahl der Zeilen, die Sie bekommen ist 1. Sie bekommen 17 Spalten, aber das äußere array der Länge 1 ist. Das innere array-Länge ist 17.
So, den Sie verwenden könnten:
Hinweis: der index des
[0]
nachsourceInfo
:sourceInfo[0]
Zurückgeben, eine Länge von 17 für die Anzahl der Spalten.
Wenn Sie nicht möchten, dass die Anzahl der Spalten auf etwas anderes als 1, dann gibt es keinen Punkt, der mit
arrayName.length
im parameter.Ihre Verwendung
sourceInfo
um die Anzahl der Spalten festlegen, aber dann schreibentempArray
. Sollten Sie verwendentempArray
zum einstellen der Parameterwerte. Verwenden Sie was auch immer-array, das die Daten zum einstellen der Parameter.Die Länge des äußeren array in 2D-array ist immer die Anzahl der Zeilen. Das inner array ist immer die Anzahl der Spalten. Aber, Sie können ein 2D array, wo die inneren arrays sind von unterschiedlicher Länge. Dann würden Sie eine Fehlermeldung erhalten.
InformationsquelleAutor Alan Wells
Kurze Antwort
Statt
versuchen
Erklärung
WENN
tempArray
ist ein 2D-array, danntempArray[0][i]
zurück ein array-element anstelle eines 2D-Arrays undsetValues(values)
erfordert ein 2D-array.Vom https://developers.google.com/apps-script/reference/spreadsheet/range#setvaluesvalues
InformationsquelleAutor Rubén