亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

替換 Google 腳本應用中的單元格值

替換 Google 腳本應用中的單元格值

寶慕林4294392 2024-01-18 14:59:10
我正在嘗試編寫一個腳本,當工作表中的單元格發生更改時"Негатив отсутствует",它將用值替換另一個工作表中的單元格的值"Нерелевант"。請幫忙,我做錯了什么?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("");        }}
查看完整描述

2 回答

?
慕田峪7331174

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('Нерелевант');? ?

? }

? }

}

讓我知道這是否對您有用,否則我想對其進行修改。


查看完整回答
反對 回復 2024-01-18
?
HUWWW

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

  }

  }

}

再次感謝您的幫助=)


查看完整回答
反對 回復 2024-01-18
  • 2 回答
  • 0 關注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號