Javascript 替换Google脚本应用程序中的单元格值

Javascript 替换Google脚本应用程序中的单元格值,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我试图编写一个脚本,当工作表中的一个单元格更改时,该脚本将用值替换另一个工作表中的一个单元格的值。救命啊,我做错什么了 function ChangeTone(event) { if (event.source.getActiveRange().getValue()=="Негатив отсутствует" && event.source.getActiveSheet()=="Разметка ТОП100 по суду"){

我试图编写一个脚本,当工作表中的一个单元格更改时,该脚本将用值替换另一个工作表中的一个单元格的值。救命啊,我做错什么了

function ChangeTone(event) { 
  if (event.source.getActiveRange().getValue()=="Негатив отсутствует" && event.source.getActiveSheet()=="Разметка ТОП100 по суду"){
    var sheet = SpreadsheetApp.getActiveSheet();
    var currRow = sheet.getActiveCell().getRow();
    var value = sheet.getRange(currRow, 1).getDisplayValue();
    var pasteSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Тональность");
    var data = pasteSheet.getDataRange().getValues();
//    if(currRow > 2){
//      sheet.deleteRow(currRow);
//    }
    for(var i = 1; i<data.length;i++){
          if(data[i][1] == value){
            pasteSheet.getRange((i), 2).clear({contentsOnly: true});
            pasteSheet.getRange((i), 2).setValue('Нерелевант');
            break;
          }
  };
//    sheet.getActiveCell().setValue("");
    
    
}
}
功能转换音(事件){
if(event.source.getActiveRange().getValue()=“Бааааааааааааааааааааа1072{
var sheet=SpreadsheetApp.getActiveSheet();
var currRow=sheet.getActiveCell().getRow();
var value=sheet.getRange(currRow,1.getDisplayValue();
var pasteSheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“ааааааааааа;
var data=pasteSheet.getDataRange().getValues();
//如果(当前行>2){
//表.删除行(当前行);
//    }
对于(变量i=1;i解释/问题:
问题:

您的代码有一个明显的问题,尤其是:

event.source.getActiveSheet()==“аззааааааааааааа

您正在将a与字符串进行比较,这将始终返回
false
。正确的方法是:

event.source.getActiveSheet().getName()=“Пзззззззззззззззз

但在这里,我还尝试优化您的代码,因为它效率很低

优化:

你没有充分利用这个机会

  • SpreadsheetApp.getActiveSpreadsheet()
    可以替换为
    e.source
当您只需要定义一次时,也可以多次定义相同的变量:

  • 对于
    event.source.getActiveSheet()
    var sheet=SpreadsheetApp.getActiveSheet();
    可以定义单个变量来存储活动工作表对象,并在需要时调用它
最后但并非最不重要的一点。我不太确定您关于
for
循环的逻辑,因为您在问题中没有提到它

但是我看到,只要源值和粘贴表中的值匹配,就可以使用
for
循环、
if
语句和
break
行来转义
for
循环

  • 您可以使用来查找与条件
    data[i][1]==value
    匹配的值,而不是使用
    for
    循环

  • 另外,如果只打算使用一列,则不需要完整的
    getDataRange()
    ,因此我也更改了该部分

解决方案:
如果这对您有效,请告诉我,否则我将修改它。

非常感谢!脚本有效=) 我以前也做过一个工作脚本。但这是我的第一个脚本,所以速度要慢得多,也不太简洁。而且它是用触发器触发的,而你的脚本是作为一个简单事件工作的。 我的旧版本:

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 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);
  }
  }
}