2 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊
說(shuō)明/問題:
問題:
您的代碼有一個(gè)明顯的問題,特別是在這里:
event.source.getActiveSheet()=="Разметка ТОП100 по суду"
您正在將工作表對(duì)象與字符串進(jìn)行比較,這將始終返回false
。正確的方法是:
event.source.getActiveSheet().getName()=="Разметка ТОП100 по суду"
但在這里我也嘗試優(yōu)化你的代碼,因?yàn)樗屎艿汀?/p>
優(yōu)化:
您沒有充分利用事件對(duì)象。
SpreadsheetApp.getActiveSpreadsheet()
可以替換為e.source
.
當(dāng)您只需要執(zhí)行一次時(shí),您還可以多次定義相同的變量:
對(duì)于
event.source.getActiveSheet()
并且var sheet = SpreadsheetApp.getActiveSheet();
您可以定義一個(gè)變量來(lái)存儲(chǔ)活動(dòng)工作表對(duì)象并在需要時(shí)調(diào)用它。
最后但并非最不重要的。我不太確定您關(guān)于for
循環(huán)的邏輯,因?yàn)槟趩栴}中沒有提到它。
但我看到,一旦源值與粘貼表中的值匹配,您就會(huì)使用for
循環(huán)、if
語(yǔ)句和break
一行來(lái)轉(zhuǎn)義循環(huán)。for
for
您可以使用findIndex來(lái)查找與 criteria 匹配的值,而不是使用循環(huán)data[i][1] == value
。getDataRange()
如果您打算只使用一列,則不需要完整的內(nèi)容,因此我也更改了該部分。
解決方案:
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('Нерелевант');? ?
? }
? }
}
讓我知道這是否對(duì)您有用,否則我想對(duì)其進(jìn)行修改。

TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個(gè)贊
非常感謝!該腳本有效=)我之前也制作過一個(gè)有效腳本。但這是我的第一個(gè)腳本,所以它要慢得多,而且不那么……簡(jiǎn)潔。它也是用觸發(fā)器觸發(fā)的,而你的則作為一個(gè)簡(jiǎn)單的事件工作。我的舊版本:
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);
}
}
}
再次感謝您的幫助=)
添加回答
舉報(bào)