невозможно прочитать свойство '0' параметра, используемого в функции скрипта приложения Google - PullRequest
0 голосов
/ 29 февраля 2020

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, которые мне не хватает?

В любом случае я бы ожидал ошибку, если ввод в функцию неправильный поэтому напечатайте «не в состоянии прочитать свойство», но в этом случае ввод - это то же самое, что и в моей первой попытке, но сценарий выдает ошибки, прежде чем даже добраться до этой точки.

Спасибо, Нестор

1 Ответ

0 голосов
/ 29 февраля 2020

Является ли SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getActiveRange().getValues(); асинхронной функцией?

Вам может понадобиться использовать Javascript async/await или Promises функции.

Что производит Logger.log('source data:', data);?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...