Google-Apps-Script не может записать обратно базу данных с помощью getDataRange(). SetValues ()
У меня есть база данных, загруженная из электронной таблицы Google:
mydatabase = sheet.getDataRange().getValues()
который затем я расширяю с новой записью:
mydatabase.push(mydatabase[x])
а затем в конце сценария, я хотел бы записать всю базу данных обратно в электронную таблицу Google, но
sheet.getDataRange().setValues(mydatabase)
дает мне ОШИБКУ, так как новая база данных на одну запись выше, чем оригинал был при загрузке.
Есть ли способ заставить getDataRange() записать базу данных обратно в лист? В противном случае в электронной таблице будет достаточно строк, чтобы вместить больший набор данных.
1 ответ
В общем, для .setValues(obj[][])
работать как положено, Range
что он действует, должен быть того же размера, что и obj[][]
,
Обычно это обеспечивается приобретением нового Range
от желаемого Sheet
:
var ss = SpreadsheetApp.openById("some id");
var sheet = ss.getSheetByName("some name");
var db = sheet.getDataRange().getValues();
/*
* Do some operations on the obj[][] that is db
* these operations can include adding / removing rows or columns.
*/
// If db is smaller than existing "written" data, the existing data should be cleared first.
if(db.length < sheet.getLastRow() || db[0].length < sheet.getLastColumn())
sheet.clearContent();
// Write the current db back to the sheet, after acquiring the
// exact number of rows and columns needed to hold the values.
sheet.getRange(1, 1, db.length, db[0].length).setValues(db);