搜索框 Google sheet
Search Box Google sheet
我想在 google sheet.it 中制作搜索框作为切片器。 Table 的数据需要使用该搜索框进行过滤。enter image description here
我想使用 Google sheet 创建搜索框作为此 excel 搜索框。
这是模型https://docs.google.com/spreadsheets/d/139PfSbmEEGt-1kXZAO5mdBJ73vhnliNXNL51R7T1wOI/edit?usp=sharing
function onEdit(e) {
var sh = e.source.getActiveSheet()
var cel = e.source.getActiveRange();
var crit = [];
var count = 0;
if (cel.getRow()==1){
try{
sh.getFilter().remove();
}
catch(e){
}
for (var col=1;col<=sh.getLastColumn();col++){
if (!sh.getRange(1,col).getValue() && sh.getRange(2,col).getValue() != ''){
crit.push([sh.getRange(2,col).getValue()])
count++
}
}
}
if (count != 0){
var filter = sh.getRange('A4:J').createFilter();
var criteria = SpreadsheetApp.newFilterCriteria()
.setHiddenValues(crit)
.build();
filter.setColumnFilterCriteria(1, criteria);
}
};
在 A2 中:
=transpose(unique(A5:A))
可能会有所改进!
这是我所做的:
第 1 步:定义过滤器
您已经在图片中完成了,所以我不解释它是如何完成的。只需在 sheet.
中定义过滤器
第 2 步:让我们制作触发器
开始之前,您需要注意两件事:具有搜索框的 sheet 的名称,以及进行搜索的单元格。
然后转到 Tools
> Script editor
并粘贴以下代码:
const SHEET_NAME = 'Sheet1'
const SEARCH_CELLS = ['E10', 'E11', null]
function onEdit(e) {
// Get edition range and sheet
const { range } = e
const sheet = range.getSheet()
// If we are not in the correct cell, return
if(sheet.getName() !== SHEET_NAME) return
// Get the filter to be able to control it
const filter = sheet.getFilter()
// Number of columns to check
const nCols = Math.min(SEARCH_CELLS.length, filter.getRange().getWidth())
for (let i = 0; i < nCols; i++) {
// Get the cell as A1 notation
const cell = SEARCH_CELLS[i]
// Ignore column if it has no cell with the value
if (!cell) continue
// Get the range used to search
const searchRange = sheet.getRange(cell)
const row = searchRange.getRow()
const col = searchRange.getColumn()
// If the search cell was edited set the value
// This checks if the point (row, col) is in the box defined by the edited cells range
if(range.getRow() <= row && range.getLastRow() >= row && range.getColumn() <= col && range.getLastColumn() >= col) {
updateFilter(sheet, filter, i, searchRange.getValue())
}
}
}
function updateFilter(sheet, filter, columnOffset, value) {
// Get the range of the values of the filter
const filterRange = filter.getRange()
// Get the column that we are filtering
const column = filterRange.getColumn() + columnOffset
if (value) {
// Get all values except the selected value
// Change this to change the logic of what to hide
const hiddenValues = sheet.getRange(filterRange.getRow(), column, filterRange.getHeight(), 1)
.getValues()
.flat()
.filter(v => v != value) // notice the non-strict equality
// Set the criteria to hide them all
const criteria = SpreadsheetApp.newFilterCriteria()
.setHiddenValues(hiddenValues)
.build()
filter.setColumnFilterCriteria(column, criteria)
} else {
// If there is not value, hide nothing
filter.removeColumnFilterCriteria(column)
}
}
然后更改上面的常量:
- 名字sheet
- 所有搜索单元格的 A1 符号的列表。该列表应按顺序排列,即第一个单元格用于第一列,第二个单元格用于第二列,依此类推。如果您不想搜索该列,请将其设置为 null。
我试着添加评论来逐步解释,但如果有什么不清楚或令人困惑的地方,请随时询问。
(可选)第 3 步:在搜索单元格中添加下拉菜单
如果您想要在搜索单元格上自动完成并允许您select下拉,请执行此(简单)步骤。
Select 搜索单元格并右键单击它。转到 Data validation
。在 Criteria
select List from range
中并添加过滤器第一列的所有值的范围。点击 Save
就成功了。
参考资料
我想在 google sheet.it 中制作搜索框作为切片器。 Table 的数据需要使用该搜索框进行过滤。enter image description here
我想使用 Google sheet 创建搜索框作为此 excel 搜索框。
这是模型https://docs.google.com/spreadsheets/d/139PfSbmEEGt-1kXZAO5mdBJ73vhnliNXNL51R7T1wOI/edit?usp=sharing
function onEdit(e) {
var sh = e.source.getActiveSheet()
var cel = e.source.getActiveRange();
var crit = [];
var count = 0;
if (cel.getRow()==1){
try{
sh.getFilter().remove();
}
catch(e){
}
for (var col=1;col<=sh.getLastColumn();col++){
if (!sh.getRange(1,col).getValue() && sh.getRange(2,col).getValue() != ''){
crit.push([sh.getRange(2,col).getValue()])
count++
}
}
}
if (count != 0){
var filter = sh.getRange('A4:J').createFilter();
var criteria = SpreadsheetApp.newFilterCriteria()
.setHiddenValues(crit)
.build();
filter.setColumnFilterCriteria(1, criteria);
}
};
在 A2 中:
=transpose(unique(A5:A))
可能会有所改进!
这是我所做的:
第 1 步:定义过滤器
您已经在图片中完成了,所以我不解释它是如何完成的。只需在 sheet.
中定义过滤器第 2 步:让我们制作触发器
开始之前,您需要注意两件事:具有搜索框的 sheet 的名称,以及进行搜索的单元格。
然后转到 Tools
> Script editor
并粘贴以下代码:
const SHEET_NAME = 'Sheet1'
const SEARCH_CELLS = ['E10', 'E11', null]
function onEdit(e) {
// Get edition range and sheet
const { range } = e
const sheet = range.getSheet()
// If we are not in the correct cell, return
if(sheet.getName() !== SHEET_NAME) return
// Get the filter to be able to control it
const filter = sheet.getFilter()
// Number of columns to check
const nCols = Math.min(SEARCH_CELLS.length, filter.getRange().getWidth())
for (let i = 0; i < nCols; i++) {
// Get the cell as A1 notation
const cell = SEARCH_CELLS[i]
// Ignore column if it has no cell with the value
if (!cell) continue
// Get the range used to search
const searchRange = sheet.getRange(cell)
const row = searchRange.getRow()
const col = searchRange.getColumn()
// If the search cell was edited set the value
// This checks if the point (row, col) is in the box defined by the edited cells range
if(range.getRow() <= row && range.getLastRow() >= row && range.getColumn() <= col && range.getLastColumn() >= col) {
updateFilter(sheet, filter, i, searchRange.getValue())
}
}
}
function updateFilter(sheet, filter, columnOffset, value) {
// Get the range of the values of the filter
const filterRange = filter.getRange()
// Get the column that we are filtering
const column = filterRange.getColumn() + columnOffset
if (value) {
// Get all values except the selected value
// Change this to change the logic of what to hide
const hiddenValues = sheet.getRange(filterRange.getRow(), column, filterRange.getHeight(), 1)
.getValues()
.flat()
.filter(v => v != value) // notice the non-strict equality
// Set the criteria to hide them all
const criteria = SpreadsheetApp.newFilterCriteria()
.setHiddenValues(hiddenValues)
.build()
filter.setColumnFilterCriteria(column, criteria)
} else {
// If there is not value, hide nothing
filter.removeColumnFilterCriteria(column)
}
}
然后更改上面的常量:
- 名字sheet
- 所有搜索单元格的 A1 符号的列表。该列表应按顺序排列,即第一个单元格用于第一列,第二个单元格用于第二列,依此类推。如果您不想搜索该列,请将其设置为 null。
我试着添加评论来逐步解释,但如果有什么不清楚或令人困惑的地方,请随时询问。
(可选)第 3 步:在搜索单元格中添加下拉菜单
如果您想要在搜索单元格上自动完成并允许您select下拉,请执行此(简单)步骤。
Select 搜索单元格并右键单击它。转到 Data validation
。在 Criteria
select List from range
中并添加过滤器第一列的所有值的范围。点击 Save
就成功了。