使用Apps脚本删除Google表格中的空行后处理数据吗?

问题描述 投票:2回答:1

以下代码运行正常。它正在排序,删除重复项并删除空行。然后,我只想将数据行复制到最后一个数据行之后。但是代码正在用空行复制数据行。复制时需要避免空行


var column = 3;   
range.sort({column: column, ascending:true});   
range.removeDuplicates([column]);   

//now delete empty rows if any   
for (var i = range.getHeight(); i >= 1; i--){
    if(range.getCell(i, 1).isBlank()){
            sheet.deleteRow(range.getCell(i, 1).getRow());
    }   
}
//For Double periods in a class    
var dataToCopy = range.getValues(); //Gets the values of the source range in a 2 dimensional array    
var copyData = sheet.getRange(range.getLastRow()+1,1,dataToCopy.length,dataToCopy[0].length).setValues(dataToCopy);
google-apps-script google-sheets google-sheets-macros
1个回答
1
投票

我相信您的目标如下。

  • 在脚本中的for循环完成之后,您要检索没有空行的值。

为此,这个答案如何?

修改点:

  • 在此答案中,对删除行的数量进行计数,并将其从rangerange.getValues();中减少。这样,dataToCopy不包括空行。

当上述几点反映到您的脚本时,它将变成如下。

修改的脚本:

var column = 3;
range.sort({column: column, ascending:true});
range.removeDuplicates([column]);

//now delete empty rows if any

var deleteRows = 0;  // <--- Added

for (var i = range.getHeight(); i >= 1; i--){
    if(range.getCell(i, 1).isBlank()){
      sheet.deleteRow(range.getCell(i, 1).getRow());
      deleteRows++; // <--- Added
    }
}
//For Double periods in a class
var dataToCopy = range.offset(0, 0, range.getNumRows() - deleteRows).getValues();  // <--- Modified
var copyData = sheet.getRange(sheet.getLastRow()+1,1,dataToCopy.length,dataToCopy[0].length).setValues(dataToCopy); // <--- Modified
  • 如果要将值放在range的最后一行,请将最后一行修改为脚本的最后一行。

参考:

© www.soinside.com 2019 - 2024. All rights reserved.