Google-Apps-Script无法使用getDataRange()写回数据库.setValues()

时间:2018-03-13 19:03:48

标签: google-apps-script arrayofarrays

我有一个从谷歌电子表格加载的数据库:

mydatabase = sheet.getDataRange().getValues()

然后我用新记录扩展:

mydatabase.push(mydatabase[x])

然后在脚本结束时,我想将整个数据库写回谷歌电子表格但是

sheet.getDataRange().setValues(mydatabase)

给了我错误,因为新数据库比加载时的原始数据高一个记录。

有没有办法强制getDataRange()将数据库写回到工作表中?否则电子表格将有足够的行来容纳更大的数据集。

1 个答案:

答案 0 :(得分: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);