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