#google-apps-script #google-sheets
Вопрос:
Как описано в названии, однако, похоже, вы столкнулись с какой-то неизвестной ошибкой. Я что, просто схожу здесь с ума? Или это связано с тем, что значения GET являются 2D-массивом.
function AppendCopy() {
var ss=SpreadsheetApp.getActive();
var sh1=ss.getSheetByName('Calculation');
var ref = ss.getSheetByName("Dashboard").getRange("B2").getValue();
var sh2=ss.getSheetByName(ref);
var A=sh1.getRange('A2:C').getValues();
sh2.appendRow([new Date(),A]);
}
Комментарии:
1. Можете ли вы поделиться точным выводом консоли, когда вы столкнулись с ошибкой? Также, может быть, включите несколько строк о том, что вы пытаетесь сделать?
Ответ №1:
A-это двумерный массив, поэтому я не уверен, чего вы пытаетесь достичь. Также, когда вы используете диапазоны, как A2:C
в скрипте, вы получаете нули между lastrow и maxrow, которые обычно должны быть удалены методом фильтра.
Попробуйте вот так:
function AppendCopy() {
var ss = SpreadsheetApp.getActive();
var sh1 = ss.getSheetByName('Calculation');
var ref = ss.getSheetByName("Dashboard").getRange("B2").getValue();
var sh2 = ss.getSheetByName(ref);
var A = sh1.getRange(2,1,sh1.getLastRow()-1,3).getValues().flat().join(', ');
sh2.appendRow([new Date(), A]);
}
Я превратил A в строку, потому что неясно, что вы пытаетесь сделать. appendRow() должен просто добавить одну строку.
После дополнительного рассмотрения, возможно, это то, что вы хотели сделать:
function AppendCopy() {
var ss = SpreadsheetApp.getActive();
var sh1 = ss.getSheetByName('Sheet1');
var ref = ss.getSheetByName("Sheet2").getRange("B2").getValue();
var sh2 = ss.getSheetByName(ref);
var A = sh1.getRange(2, 1, sh1.getLastRow() - 1, 3).getValues().map(r => { r.unshift(new Date()); return r; });
if (sh2.getLastRow() > 1) {
sh2.getRange(sh2.getLastRow() 1, 1, A.length, A[0].length).setValues(A);
} else {
sh2.getRange(1, 1, A.length, A[0].length).setValues(A);
}
}
Это последнее решение добавит диапазон данных в нижнюю часть sh2 с датой, вставленной в первый столбец каждой строки.