Google App Script / JavaScript новичок здесь. Я искал способ скопировать столбец с листа Google 1, транспонировать его и скопировать как строку на листе 2 в той же электронной таблице. Я нашел этот 1-строчный скрипт здесь , скопированный сюда для справки:
function transpose(a)
{
return a[0].map(function (_, c) { return a.map(function (r) { return r[c]; }); });
}
Сначала я успешно реализовал функцию транспонирования следующим образом, сначала выбрав столбец данных в лист go для редактора сценариев и запуска этого сценария:
function transpose(a)
{
var a = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getActiveRange().getValues();
var b = a[0].map(function (_, c) { return a.map(function (r) { return r[c]; }); });
Logger.log('source data:', a);
Logger.log('transposed data:',b);
}
, который выводит в журнал следующее:
- [20-02-29 14:50 : 38: 585 EST] исходные данные: [[1.0], [2.0], [3.0], [4.0]]
- [20-02-29 14: 50: 38: 587 EST] транспонированные данные: [[1.0, 2.0, 3.0, 4.0]]
, показывающий, что это работает.
Я буду использовать транспонирование довольно много раз в своем окончательном приложении, и хотя я У меня есть что-то «жестко запрограммированное», которое работает, я хотел создать отдельную функцию транспонирования, которую я мог бы вызывать где угодно, и вот тут у меня возникли проблемы.
Чтобы попробовать эту идею, я сделал следующее:
var data = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getActiveRange().getValues();
function transpose(a)
{
return a[0].map(function (_, c) { return a.map(function (r) { return r[c]; }); });
}
var b = transpose(data);
Logger.log('source data:', data);
Logger.log('transposed data:', b);
, но я получаю сообщение об ошибке: "Ошибка типа: Не удается прочитать свойство '0' неопределенного (строка 5, файл" транспонировать ")"
Я не понимаю и почему внутри скрипта функции транспонирования он не понимает параметр «a» как заполнитель для того, что позже заменяет его как ввод, как в любой другой пользовательской параметризованной функции. Очевидно, что оно не определено так же, как «x» в функции 2 * x.
Что происходит? Может быть, я касаюсь некоторых нюансов синтаксических различий между чистым javascript и скриптом приложения Google, которые мне не хватает?
В любом случае я бы ожидал ошибку, если ввод в функцию неправильный поэтому напечатайте «не в состоянии прочитать свойство», но в этом случае ввод - это то же самое, что и в моей первой попытке, но сценарий выдает ошибки, прежде чем даже добраться до этой точки.
Спасибо, Нестор