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);
}
}
}
再次感谢您的帮助=)
添加回答
举报