电子表格中的当前值过滤器?

时间:2019-10-02 12:27:01

标签: google-apps-script google-sheets

类似于这里的问题 ExcelVBA_CurrentValuecu_Filter?

I want

(1,A)=data

(2,A)=a

(3,A)=b

(4,A)=c

(5,A)=b

(6,A)=d


CurrentCell(3,A) ---> execute --> output (2,A)=b,(3,A)=b 
function Spreadsheet_CurrentValue_Filter() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getCurrentCell().offset(-4, 0).activate();

  var criteria = SpreadsheetApp.newFilterCriteria()
                               .setHiddenValues(['', 'a', 'c', 'd'])
                               .build();
  spreadsheet.getActiveSheet().getFilter()
                              .setColumnFilterCriteria(spreadsheet
                                                       .getActiveRange()
                                                       .getColumn(), criteria);
}

在此先感谢您,英语不好!

添加----------------------------------

(1)myhiddendata = ['','a','c','d']

数组变量?如何输出?

(2)偏移(-4,0)。 -4?

1 个答案:

答案 0 :(得分:1)

目标:

隐藏列过滤器中除当前选定单元格中的值以外的所有其他值(或仅显示等于当前单元格的元素)

流量:

  • 获取当前列中的所有值
  • 使用Array#reduce过滤所有与当前单元格值匹配的值
  • 使用.setHiddenValues()来设置过滤后的数组(hiddenValues),因为仍然不支持setVisibleValues

摘要:

function Spreadsheet_CurrentValue_Filter() {
  var spreadsheet = SpreadsheetApp.getActive(),
    sheet = spreadsheet.getActiveSheet();

  var currCell = sheet.getCurrentCell(),
    currCellValue = currCell.getValue(),
    currCol = currCell.getColumn(),
    allValues /**all values in current column */ = sheet
      .getRange(1, currCol, sheet.getLastRow(), 1)
      .getValues();

  /*Get hidden values as a 1D array from 2D array allValues*/
  var hiddenValues = allValues.reduce(function(acc, [row]) {
    if (!(row === currCellValue)) {
      acc.push(row);
    }
    return acc;
  }, []);

  var criteria = SpreadsheetApp.newFilterCriteria()
    .setHiddenValues(hiddenValues)
    .build();
  sheet.getFilter().setColumnFilterCriteria(currCol, criteria);
}