类似于这里的问题 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?
答案 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);
}