是否可以通过脚本选择和删除仅过滤(可见)条目?

时间:2020-03-15 16:56:17

标签: google-apps-script google-sheets

基本上,我想应用一个或多个过滤器,然后选择所有可见的内容并删除选定的行,所有这些都必须通过脚本来完成。但是,我在任何地方都看不到这样的选项(Excel具有特殊的功能,仅选择可见)。例如,一个会话可能从第7行开始,我可以从第7行开始记录宏,然后向下...但是,如果另一个数据集显示了从2开始的可见行,这将如何受到影响?有没有一种简单的方法可以选择所有可见的内容?

2 个答案:

答案 0 :(得分:0)

尝试一下:

我不使用过滤器,所以我以前从未做过此事,但是也许这会给您一个开始。

function runOne() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var sr=2;//starting row
  var rg=sh.getRange(sr,1,sh.getLastRow()-sr+1,sh.getLastColumn());
  var vs=rg.getValues();
  var d=0;//deleted row counter
  vs.forEach(function(r,i){
    if(!sh.isRowHiddenByFilter(i+sr-d)) {
      sh.deleteRow(i+sr-d++);
    }
  });
}

isRowHiddenByFilter

deleteRow

答案 1 :(得分:0)

希望库珀的回答有帮助

我做了一些类似的工作,我使用了一个稍微简化的版本 -

var j = spreadsheet.getLastRow();
var s = SpreadsheetApp.getActive().getActiveSheet();

for (var i = j; i > 1; i--) {
    if (!s.isRowHiddenByFilter(i)) {
      s.deleteRow(i);
    }
}

我从下往上走的原因是,如果从上往下走,那么说如果第 2、3、4 行可见并且我删除了第 2 行 - 那么第 3 行现在变成第 2 行并被跳过删除行的循环。

告诉我进展如何。

编辑: 如果您的最后一行与您使用过滤器的最后一行数据不同,并且您只想删除特定列的数据,请参阅以下代码

var Avals = spreadsheet.getRange("B1:B").getValues();
var j = Avals.filter(String).length;
var s = SpreadsheetApp.getActive().getActiveSheet();

for (var i = j; i > 1; i--) {
    if (!s.isRowHiddenByFilter(i)) {
      s.getRange('A'+i+':J'+i).deleteCells(SpreadsheetApp.Dimension.ROWS);
      //here A is my starting column, and J is my ending column
    }
}