将行添加到过滤范围

时间:2019-08-27 18:52:47

标签: google-apps-script google-sheets

我在Google表格中有一个待办事项列表应用程序。我具有按“注释类型”和“完成状态”进行过滤的功能,这些功能可以在用户给定的任何时刻使用。

我还具有轻松添加任何给定类型的新音符的功能。但是,当运行该函数添加新笔记时,并且工作表已被过滤时,出现以下错误:

“具有过滤出行的范围不支持此操作。”

关于如何将行添加到过滤范围的任何建议?

这是我用来添加特定类型新笔记的代码:

function addNewCueNote() {
  if( sheet.getSheetName() == sheetName ) {
    var noteType = "CUE"

   //ADDS ROW AND COPIES FORMULA DOWN
  //SETS VARIABLES FOR LAST ROW AND LAST COLUMN
  var lRow = sheet.getLastRow(); 
  var lCol = sheet.getLastColumn();
  //INSERT LAST ROW  
  sheet.insertRowsAfter(lRow, 1);
  //COPY FORMULAS DOWN FOR SPECIFIED COLUMNS
  sheet.getRange(lRow,firstCopyCol,1,numColCopy).copyTo(sheet.getRange(lRow+1,firstCopyCol,1,numColCopy));

    //SETS NOTE TYPE    
    sheet.getRange(sheet.getLastRow(),noteTypeCol).setValue(noteType); 
}

2 个答案:

答案 0 :(得分:2)

获取现有过滤器,将其从工作表中删除,添加新行,然后使用初始过滤器中的条件重新创建过滤器。

function addNewCueNote() {
  var sheet = SpreadsheetApp.getActiveSheet();  // added to get code to run; not sure if you handle elsewhere

  if (sheet.getSheetName() === sheetName) {

    // Save state of existing filter before removing it
    var oldCriteria = [];
    var filter = sheet.getFilter();
    if (filter != null) {
      var oldNumColumns = filter.getRange().getNumColumns();
      for (var c = 1; c <= oldNumColumns; c++) {
        var criteria = filter.getColumnFilterCriteria(c);
        if (criteria != null) {
          oldCriteria.push([c, criteria.copy()]);
        }
      }
      filter.remove();
    }


    //*** PUT YOUR ROW INSERT LOGIC HERE ***


    // Recreate filter on new data range
    var dataRange = sheet.getDataRange();
    var newFilter = dataRange.createFilter();
    if (filter != null) {
      var newNumColumns = dataRange.getNumColumns();
      for (var i = 0; i < oldCriteria.length && oldCriteria[i][0] <= newNumColumns; i++) {
        newFilter.setColumnFilterCriteria(oldCriteria[i][0], oldCriteria[i][1]);
      }
    }
}

答案 1 :(得分:0)

@Nick您的代码逻辑有问题。无论如何,这都是有效的代码

final Dialog dialog=new Dialog(FirstActivity.this);
  dialog.setCancelable(false);
  dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
  dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
  dialog.setContentView(R.layout.dialog_custom);
  TextView cancel_btn=dialog.findViewById(R.id.cancel_btn);
  cancel_btn.setOnClickListener(new View.OnClickListener(){
     @Override
     public void onClick(View view){
        dialog.dismiss();
     }
  });
  TextView ok_btn=dialog.findViewById(R.id.ok_btn);
  ok_btn.setOnClickListener(new View.OnClickListener(){
     @Override
     public void onClick(View view){
        dialog.dismiss();

     }
  });
  dialog.show();