我有一个从谷歌电子表格加载的数据库:
mydatabase = sheet.getDataRange().getValues()
然后我用新记录扩展:
mydatabase.push(mydatabase[x])
然后在脚本结束时,我想将整个数据库写回谷歌电子表格但是
sheet.getDataRange().setValues(mydatabase)
给了我错误,因为新数据库比加载时的原始数据高一个记录。
有没有办法强制getDataRange()将数据库写回到工作表中?否则电子表格将有足够的行来容纳更大的数据集。
答案 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);