Uncaught Не удается преобразовать массив в объект[][] при передаче массива массивов в range.setValues()

Желаемое поведение

Заполните 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()?


person user1063287    schedule 12.10.2016    source источник
comment
Когда вы получаете целевой диапазон, он должен иметь точно такие же размеры, как и двумерный массив. Сначала проверьте данные в code.gs на тип данных с помощью 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
comment
Ваши предложения помогли мне более четко обдумать проблему, оказалось, что у меня был вложенный объект в моих внутренних массивах, о котором я забыл (массив и объекты, с которыми я работал, были большими), и это была проблема - как только я сделал некоторые рефакторинг и убедился, что все было значением массива, оно работало хорошо.   -  person user1063287    schedule 15.10.2016