2 回答

TA貢獻1828條經驗 獲得超13個贊
說明/問題:
問題:
您的代碼有一個明顯的問題,特別是在這里:
event.source.getActiveSheet()=="Разметка ТОП100 по суду"
您正在將工作表對象與字符串進行比較,這將始終返回false
。正確的方法是:
event.source.getActiveSheet().getName()=="Разметка ТОП100 по суду"
但在這里我也嘗試優化你的代碼,因為它效率很低。
優化:
您沒有充分利用事件對象。
SpreadsheetApp.getActiveSpreadsheet()
可以替換為e.source
.
當您只需要執行一次時,您還可以多次定義相同的變量:
對于
event.source.getActiveSheet()
并且var sheet = SpreadsheetApp.getActiveSheet();
您可以定義一個變量來存儲活動工作表對象并在需要時調用它。
最后但并非最不重要的。我不太確定您關于for
循環的邏輯,因為您在問題中沒有提到它。
但我看到,一旦源值與粘貼表中的值匹配,您就會使用for
循環、if
語句和break
一行來轉義循環。for
for
您可以使用findIndex來查找與 criteria 匹配的值,而不是使用循環data[i][1] == value
。getDataRange()
如果您打算只使用一列,則不需要完整的內容,因此我也更改了該部分。
解決方案:
function onEdit(e){
?const ss = e.source;
?const ar = e.range;
?const activeSheet = ss.getActiveSheet();
?const pasteSheet = ss.getSheetByName("Тональность");
? if (ar.getValue()=="Негатив отсутствует" && activeSheet.getName()=="Разметка ТОП100 по суду"){
? ? const value = activeSheet.getRange(ar.getRow(), 1).getValue();
? ? const data = pasteSheet.getRange('B1:B'+pasteSheet.getLastRow()).getValues().flat();
? ? const indx = data.findIndex((element) => element == value);
? ? if (indx>-1){
? ? ? const pasteRng = pasteSheet.getRange(indx+1,2);
? ? ? pasteRng.clearContent();
? ? ? pasteRng.setValue('Нерелевант');? ?
? }
? }
}
讓我知道這是否對您有用,否則我想對其進行修改。

TA貢獻1874條經驗 獲得超12個贊
非常感謝!該腳本有效=)我之前也制作過一個有效腳本。但這是我的第一個腳本,所以它要慢得多,而且不那么……簡潔。它也是用觸發器觸發的,而你的則作為一個簡單的事件工作。我的舊版本:
function ChangeTone(event) {
if (event.source.getActiveRange().getValue()=="Негатив отсутствует" && event.source.getActiveSheet().getName() == "Разметка ТОП100 СУД"){
var sheet = SpreadsheetApp.getActiveSheet();
var currRow = sheet.getActiveCell().getRow();
sheet.getRange("A"+currRow+":F"+currRow).setBackground('#ff5a5a');
var value = sheet.getRange(currRow, 1).getDisplayValue();
var pasteSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Тональность");
var data = pasteSheet.getDataRange().getValues();
for(var i = 1; i<data.length;i++){
if(data[i][0] == value){
pasteSheet.getRange((i+1), 2).setValue('Нерелевант');
sheet.getRange("C"+currRow+":F"+currRow).deleteCells(SpreadsheetApp.Dimension.ROWS);
}
};
sheet.getRange("A"+currRow+":B"+currRow).setBackground('#ffffff');
}
}
因此,在替換單元格值后,使用您的代碼并添加行刪除。最終版本:
function onEdit(e){
const ss = e.source;
const ar = e.range;
const arRow = ar.getRow();
const activeSheet = ss.getActiveSheet();
const pasteSheet = ss.getSheetByName("Тональность");
if (ar.getValue()=="Негатив отсутствует" && activeSheet.getName()=="Разметка ТОП100 СУД"){
const value = activeSheet.getRange(arRow, 1).getValue();
const data = pasteSheet.getRange('A1:A'+pasteSheet.getLastRow()).getValues().flat();
const indx = data.findIndex((element) => element == value);
if (indx>-1){
const pasteRng = pasteSheet.getRange(indx+1,2);
pasteRng.clearContent();
pasteRng.setValue('Нерелевант');
activeSheet.getRange("C"+arRow+":F"+arRow).deleteCells(SpreadsheetApp.Dimension.ROWS);
}
}
}
再次感謝您的幫助=)
添加回答
舉報