Желаемое поведение
Заполните Google Sheet массивом массивов из файла Javascript.
// in js file (within google apps script project)
var aoa = [["row_01_val01", "row_01_val02", "row_01_val03"],
["row_02_val01", "row_02_val02", "row_02_val03"]]; // etc
google.script.run.withSuccessHandler(console.log("success")).populateSpreadsheet(aoa);
// in code.gs
// define target_range (ignore discrepancies between example values above)
var target_range = active_sheet.getRange(2, 1, 834, 20);
// set values of target_range
target_range.setValues(aoa);
Текущее поведение
// chrome developer tools (firefox/firebug not supported at work)
Uncaught Cannot convert Array to Object[][]
Вопрос
Я не могу опубликовать более конкретный код из-за ограничений работы (не могу получить доступ к SO с работы или взять код домой, отсюда и псевдокод), но есть ли какие-либо общие 'gotchas'
, когда дело доходит до передачи массива массивов из файла Javascript в Code.gs
для использования в setValues()
?
Что я пробовал
В файле js console.log(typeof(aoa))
возвращает object
непосредственно перед передачей его populateSpreadsheet()
в Code.gs
, а затем Logger.log(aoa)
в populateSpreadsheet()
также возвращает object
Пример:
var outer_array = [];
inner_array = [1,2,3];
outer_array.push(inner_array);
typeof(outer_array);
"object"
Я пытался реорганизовать код несколько раз, но мне интересно, есть ли какие-либо общие ошибки, такие как ограничения размера, квоты, тайм-ауты или какие-то другие «причуды», которые я не учел?
Например, этот вопрос и ответ требовали, чтобы массив массивов был реконструирован перед передачей его в setValues()
(я пробовал это, но в моем случае это не сработало):
https://stackoverflow.com/a/11066322/1063287
Еще я подумал, что использую splice()
(ссылка MDN), чтобы добавить некоторые значения во внутренний массив в пределах Code.gs
, поэтому я не уверен, что это как-то меняет тип, допустимый для передачи в setValues()
?
typeof aoa
Например:if (typeof aoa !== 'object') {aoa = JSON.parse(aoa)}; //convert string to array
Затем получите диапазон сvar target_range = active_sheet.getRange(2, 1, aoa.length, aoa[0].length); //set rows to number of inner arrays and columns to number of elements in first array
- person Alan Wells   schedule 12.10.2016