我試圖找到一種方法,使用 onEdit 函式根據另一張紙上的復選框選擇的行來洗掉一張紙上的一行。
該復選框位于Sheet1的 A 列中;該行是可變的,因為 Sheet1 是一個搜索頁面。唯一的搜索結果/搜索字串在B 列中。我要從此搜索頁面中洗掉的記錄位于第二張作業表Sheet2上。在 Sheet2 中,一些相同的資料與 Sheet1 重復,但沒有復選框。因此, Sheet1 上的B列中的唯一識別符號是Sheet2 上的A列,這就是我希望洗掉的地方。在 Sheet2 中,A 列的值始終是唯一的,所以我認為這不需要陣列。
所以,總而言之,這個腳本會說:如果檢查了 Sheet1 上的一行,請查看該行中 B 列的值。然后,在 Sheet2 中搜索 A 列。如果匹配,則洗掉行。所以,我的問題是:如何撰寫這個腳本?
然而,有一個輕微的復雜性,我不愿提及,因為擔心問題會因“缺乏焦點”而面臨關閉。(所以,如果你只是想回答上面的問題而忽略這一點,那還是很棒的!)。我只是問,因為我覺得它首先會影響腳本的編碼方式。我只希望在 Sheet1 上的E 列顯示Indirect時發生這種洗掉。如果 E列為空白,或包含其他文本,則腳本運行如下:
function onEdit(e) {
if (e.range.columnStart != 1) return;
if (e.value != 'TRUE') return;
var sheet = SpreadsheetApp.getActive();
var ignored_sheets = ['Sheet2','Sheet3'];
if (ignored_sheets.includes(sheet.getName())) return;
if(e.range.getSheet().getRange(e.range.getRow(),5).getValue().length > 0){
sheet.toast("Can't overwrite data.");
sheet.getActiveCell().setValue(false);
return;};
var row_index = e.range.rowStart;
var row = sheet.getRange('B' row_index ':D' row_index).getDisplayValues().flat();
if (row[1] == '') return;
var result = SpreadsheetApp.getUi()
.alert("Append record?", SpreadsheetApp.getUi().ButtonSet.OK_CANCEL);
if (result != SpreadsheetApp.getUi().Button.OK) {
sheet.toast("Operation canceled.");
sheet.getActiveCell().setValue(false);
return;}
sheet.toast("Operation complete.");
sheet.getActiveCell().setValue(false);
sheet.getRange('B3').clearContent();
sheet.getSheetByName('Sheet2').appendRow(row);
sheet.getSheetByName('Sheet1').setActiveCell('B3');
}
uj5u.com熱心網友回復:
根據您在評論中提到的問題陳述:-
我要添加的第三個功能是洗掉記錄的能力,如果它們的列 E 值為“間接”
示例腳本將如下所示:-
function onEdit(e)
{
const value = e.value
const range = e.range
const sheet = range.getSheet();
const row = range.getRow();
const column = range.getColumn();
const ss = SpreadsheetApp.getActiveSpreadsheet();
const checkValue = sheet.getRange(row, 5).getValue(); // Column E value
if(column === 1 && value == 'TRUE' && checkValue === 'Indirect')
{
const ref_IDtoSearch = sheet.getRange(row, 2).getValue(); // ref id in sheet 1
const targetSheet = ss.getSheetByName('Sheet2')
const refRange = targetSheet.getRange('A1:A').getValues().flat(); // Range ref column in sheet 2
const posRow = refRange.indexOf(ref_IDtoSearch)
if(posRow > -1)
{
targetSheet.deleteRow(posRow 1)
}
}
}
將其合并到您現有的onEdit代碼中。
參考:
洗掉行()
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/434979.html
