使用带有apps脚本的query()不断向工作表添加500行

时间:2015-07-01 18:56:45

标签: google-apps-script google-sheets

我正在制作一张大纸,如果有gsheets配额,细胞就很珍贵。

我有一个范围,当数据自动更新时,脚本会自动将命名范围更新为数据的全长。

命名范围称为“gadatapull”。此范围位于“datapull”选项卡上。

两个标签。 “datapull”是转储新数据的地方,“data_prep”是我对数据进行处理的地方。刚刚进行了新的拉动后,datapull有2,733行数据,包括标题。

我希望data_prep与datapull具有相同的长度。在data_prep顶部添加7行文本。

当我更新数据的脚本运行时,我这样做:

 // clear dataprep sheet for new data
  var lastRow = 7; 
  var maxRows = dataprep.getLastRow();
  if(maxRows - lastRow > 0) {
    dataprep.deleteRows(lastRow+1, maxRows-lastRow);
  }

data_prep有7行(因为脚本刚删除了7以上的所有行)。

现在,在data_prep单元格A7中,我有:

=query(indirect("gadatapull"),"select *")

预期结果是“gadatapull”中的所有新数据都会出现在data_prep选项卡中,而data_prep选项卡会相应地扩展。

但实际发生的是所有数据都按预期到达,但随后底部还有500行空白。这个500号码太圆了。让我觉得Gsheets会在某种情况下自动将此数字添加为默认值。

如何阻止Gsheets添加这些额外的500行?

1 个答案:

答案 0 :(得分:1)

您可以在导入数据之前添加所有必需的单元格,而不是让工作表API扩展行数(这是您的假设,也可能是真的;-)。

我没有尝试过真实条件,但这应该有用。

顺便说一下,脚本也会导入数据。

代码:

function copyDataToSheet(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var dataprep = ss.getSheetByName('data_prep');
  var datapull = ss.getSheetByName('datapull');
  var lastRow = 7; 
  var maxRows = dataprep.getLastRow();
  if(maxRows - lastRow > 0) {
    dataprep.deleteRows(lastRow+1, maxRows-lastRow);
  }
  var datapullSize = datapull.getLastRow();
  dataprep.insertRows(7,datapullSize);// insert exactly the number of rows you need.
  var dataToCopy = datapull.getDataRange().getValues()
  dataprep.getRange(7,1,dataToCopy.length,dataToCopy[0].length).setValues(dataToCopy);
}