我一直在嘗試使用 Google Apps Script 過濾列,但我無法了解過濾器如何針對第二個條件作業。
我想創建一個過濾器,它適用于附件表中提供的整個資料驗證。
如果我選擇positionfromcell C2 Head Of Product Design那么position列將顯示行,Head Of Product Design然后我選擇Stage Namefrom cell D2 Profile review。然后將為 C2 創建兩個過濾器,一個用于 C2,另一個用于 D2,所有過濾器也是如此。
您的幫助將不勝感激。
然而,第一個onEdit作業,但第二個不作業,我不知道為什么。然后我需要提前創建過濾器。但我被困在第二個 1。
您的幫助將不勝感激。
床單
function onEdit() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet1 = ss.getSheetByName("Sheet1");
const value = sheet1.getRange('C2').getValue();
const range = sheet1.getRange("A5:T");
const filter = sheet1.getFilter();
if (filter) {
filter.remove();
}
range.createFilter().setColumnFilterCriteria(2, SpreadsheetApp.newFilterCriteria().whenTextContains(value).build());
}
function onEdit2() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet1 = ss.getSheetByName("Sheet1");
const value = sheet1.getRange('D2').getValue();
const range = sheet1.getRange("A5:T");
const filter = sheet1.getFilter();
if (filter) {
filter.remove();
}
range.createFilter().setColumnFilterCriteria(4, SpreadsheetApp.newFilterCriteria().whenTextContains(value).build());
}
uj5u.com熱心網友回復:
在你的情況下,下面的修改如何?
修改后的腳本:
function onEdit() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet1 = ss.getSheetByName("Sheet1");
const [c2, d2] = sheet1.getRange('C2:D2').getValues()[0];
const range = sheet1.getRange("A5:T");
const filter = sheet1.getFilter();
if (filter) {
filter.remove();
}
range.createFilter()
.setColumnFilterCriteria(2, SpreadsheetApp.newFilterCriteria().whenTextContains(c2).build())
.setColumnFilterCriteria(4, SpreadsheetApp.newFilterCriteria().whenTextContains(d2).build());
}
- 在這個修改后的腳本中,您的
onEdit和onEdit2被合并。
添加:
從您的以下新問題中,
我有多個包含不同資料的作業表,但每個作業表都有相同的資料驗證單元格和過濾器將應用的列。所以你上面的代碼正在 Sheet1 中使用,然后我為 Sheet2 添加相同的代碼但是 Sheet2 代碼不起作用。我沒有更改兩張作業表的 onEdit 代碼名稱
當 Sheet1 被編輯腳本應該適用于 Sheet1 如果添加了 Sheet2 腳本應該適用于 Sheet2
在這種情況下,以下示例腳本如何?
示例腳本:
function onEdit() {
const sheets = ["Sheet1", "Sheet2"];
const sheet = SpreadsheetApp.getActiveSheet();
if (!sheets.includes(sheet.getSheetName())) return;
const [c2, d2] = sheet.getRange('C2:D2').getValues()[0];
const range = sheet.getRange("A5:T");
const filter = sheet.getFilter();
if (filter) {
filter.remove();
}
range.createFilter()
.setColumnFilterCriteria(2, SpreadsheetApp.newFilterCriteria().whenTextContains(c2).build())
.setColumnFilterCriteria(4, SpreadsheetApp.newFilterCriteria().whenTextContains(d2).build());
}
運行此腳本時,當活動作業表為 Sheet1 和 Sheet2 時,將運行該腳本。
從OP's previous question,我了解到 OP 希望在不使用事件物件的情況下實作這一目標。所以我提出了上面的示例腳本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/358354.html
