setValues не может преобразовать массив в объект [][]
Я кодирую это в скрипте приложений Google для листа:
function basePesa(){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("aux");
var unique = sheet.getRange("C1").setFormula("=unique(A:A)");
var Avals = sheet.getRange("C1:C").getValues();
var Alast = Avals.filter(String).length;
var transp = sheet.getDataRange().getValues();
var ss = SpreadsheetApp.openById("14Y3xiAa9kdoK_YO_tAVN-YWC9RE1EANV5wm8Ez1sa1o");
var base =ss.getSheetByName("Base PESA");
var values = base.getDataRange().getValues();
var newdata = new Array(values.length);
var y = 0;
// Browser.msgBox(transp.length);
for(var i=0;i<Alast;i++){
var tra = Avals[i][0];
for(var x =1; x<values.length;x++){
if(values[x][18] == tra){
newdata[y] = new Array(values[0].length);
for(var p=0; p<values[0].length;p++)
newdata[y][p] = values[x][p];
y++;
}
}
}
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Bco de Dados").getRange("A2:AZ"+(y+1)+"").setValues(newdata);
// Browser.msgBox(newdata);
}
Кажется, я не могу записать массив в диапазон. Я проверил, совпадают ли диапазоны, и уверен, что этот массив является 2D. Любые инструкции?
Заранее спасибо!
2 ответа
Похоже, что создание массива newdata было проблемой. Вот пример, который работает (я поставил плохой код в комментарии):
function basePesa(){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("aux");
var unique = sheet.getRange("C1").setFormula("=unique(A:A)");
var Avals = sheet.getRange("C1:C").getValues();
var Alast = Avals.filter(String).length;
var transp = sheet.getDataRange().getValues();
var ss = SpreadsheetApp.openById("14Y3xiAa9kdoK_YO_tAVN-YWC9RE1EANV5wm8Ez1sa1o");
var base =ss.getSheetByName("Base PESA");
var values = base.getDataRange().getValues();
var newdata = [];//new Array(values.length);
var y = 0;
// Browser.msgBox(transp.length);
for(var i=0;i<Alast;i++){
var tra = Avals[i][0];
for(var x =1; x<values.length;x++){
if(values[x][18] == tra){
//newdata[y] = new Array(values[0].length);
var test = [];
for(var p=0; p<values[0].length;p++)
{
test.push(values[x][p]);
//newdata[y][p] = values[x][p].toString();
}
newdata.push(test);
y++;
}
}
}
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Bco de Dados").getRange("A2:AZ"+(y+1)+"").setValues(newdata);
// Browser.msgBox(newdata);
}
Массив 1: [ A, B, C ] <---- Совместимо для 1 строки, 3 столбцов
Массив 2: [ [A], [B], [C] ] <--- Совместимо для 3 строк, 1 столбца
Массив 3: [[A, B, C], [A, B, C], [A, B, C]] <--- Совместимо для 3 строк, 3 столбцов **
** Важно отметить, что ширина каждого меньшего массива в пределах большего массива (в данном случае 3) должна быть одинаковой для каждого из меньших массивов.
Основываясь на аналогичной проблеме, я предполагаю, что в последней строке, где у вас есть
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Bco de Dados").getRange("A2:AZ"+(y+1)+"").setValues(newdata);
вместо того
.setValues(newdata);
вы должны использовать
.setValues([newdata]);
Обратите внимание на квадратные скобки! Это решение в основном такое же (но короче), что и
...
var newdata = []
var test = []
...
test.push(values[x][p]
...
newdata.push(test)
...
....setValues(newdata)