我一直在嘗試使用 Google Sheets App Script 創建一個簡單的過濾器。如果單元格 C2 值包含“RAM”,則 Col"2" 應隱藏除“RAM”之外的所有行。但它不作業。
我在單元格 C2 中創建了一個資料驗證,它更改了值。任何幫助將不勝感激。
function create_filter(){
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet1 = ss.getSheetByName("Filter_Sheet");
const range = sheet1.getRange("A5:T");
const filter = range.createFilter();
const Filter_Criteria1 = Sheet1.range('C2').getActiveCell;
const coll1 = 2
const add_filter = filter.setColumnFilterCriteria(coll1,Filter_Criteria1);
}
另一個嘗試:
function create_filter(){
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet1 = ss.getSheetByName("Filter_Sheet");
const range = sheet1.getRange("A4:T");
const filter = range.createFilter();
var range2 = SpreadsheetApp.getActiveSheet().getRange('D2');
var range3 sheet1.getRange('C2').activate();
var criteria = SpreadsheetApp.newFilterCriteria()
.setHiddenValues([cell != range2 ])
.build();
spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(3, criteria);
};
uj5u.com熱心網友回復:
我相信你的目標如下。
- 您想要創建基本過濾器,當
RAM單元格值中包含文本時,您想要顯示行。
在這種情況下,如何進行以下修改?
修改后的腳本:
function create_filter() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet1 = ss.getSheetByName("Filter_Sheet");
const range = sheet1.getRange("A5:T");
const filter = range.createFilter();
filter.setColumnFilterCriteria(2, SpreadsheetApp.newFilterCriteria().whenTextContains("RAM").build());
}
在您的 2 個腳本中,使用了
const range = sheet1.getRange("A5:T")和 的2 個范圍const range = sheet1.getRange("A4:T")。在此修改中,const range = sheet1.getRange("A5:T")使用了。關于這一點,請根據您的實際情況進行修改。運行此腳本時,將
RAM顯示列“B”的值處包含的行。
參考:
- setColumnFilterCriteria(columnPosition, filterCriteria)
- 類 FilterCriteriaBuilder
添加1:
從以下評論中的回復和您的腳本中,
我在單元格 C2 中創建了一個資料驗證,該驗證中有 10 到 11 個不同的字串,包括 RAM。所以我想創建一個編輯功能,每當單元格 C2 字串更改腳本時,腳本應該運行并且列 B 將顯示單元格 C2 中可用的確切值
我認為作業表名稱是“Filter_Sheet”并且資料驗證被放到單元格“C2”中。但是,當我看到你的電子表格時,作業表名稱是“Sheet1”,資料驗證被放入單元格“C1”。因此,以下示例腳本使用您的示例電子表格。當您更改作業表名稱時,請修改Sheet1為其他名稱。
function onEdit(e) {
const offset = 0; // When the data validation is cell "C1" and "C2", please use 0 and 1, respectively.
const {range, value} = e;
const sheet = range.getSheet();
if (sheet.getSheetName() != "Sheet1" || range.getA1Notation() != "C" (1 offset)) return;
const r = sheet.getRange(`A${4 offset}:T`);
const filter = sheet.getFilter();
if (filter) {
filter.remove();
}
r.createFilter().setColumnFilterCriteria(2, SpreadsheetApp.newFilterCriteria().whenTextContains(value).build());
}
從您的以下回復中,
細節完全不同,因為它只是樣本表,我可以稍后在應用于真實表時修改代碼
- 請根據您的實際情況修改上述腳本。
添加2:
從您的以下回復中,
但我無法編輯此代碼。我很難理解,const value = sheet1.getRange('C2').getValue(); 如果可以使用,那么我可以更改單元格參考。
You want to run the script when the cell "C1" is edited. From your additional question, I understood like this. So, I proposed the modified script for using the event object of OnEdit simple trigger. But, when you don't want to use the event object, how about the following script?
function onEdit() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet1 = ss.getSheetByName("Sheet1");
const value = sheet1.getRange('C1').getValue();
const range = sheet1.getRange("A4:T");
const filter = sheet1.getFilter();
if (filter) {
filter.remove();
}
range.createFilter().setColumnFilterCriteria(2, SpreadsheetApp.newFilterCriteria().whenTextContains(value).build());
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/358796.html
