首页 > 解决方案 > 如果使用 VLOOKUP,onEdit() 不会触发

问题描述

-我有一个名为“位置”的电子表格。

- 该表的 A 列具有列表数据验证,可在同一文件的“项目”电子表格中找到。

-我在“位置”的各个列上都有 IFERROR/VLOOKUP 功能,以自动填充这些单元格

-“项目”上的数据使用 IMPORTRANGE 链接到另一个 Google 表格文件。该谷歌工作表文件是一个不断更改的主列表,并且链接到多个工作表。

**我想要实现的是,一旦选择了“位置”的 A 列上的值并且 VLOOKUP 发生在各个列上,我希望这些单元格仅复制粘贴特殊值。我能够让代码工作(如下所列)。但是如果我有 5000 行,那么手动更改变量会很痛苦。任何更简单的脚本来实现这一点?

我不是真正的程序员,因此我们将不胜感激专家的任何帮助。


我试过 onEdit Range 但似乎没有将 VLOOKUP 识别为编辑事件。

function onEdit(e) {
var sheet = SpreadsheetApp.getActiveSheet();
  
var r3 = sheet.getRange("C3").getValue();
if (r3 != 0){
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('C3:E3').activate();
  spreadsheet.getRange('C3:E3').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('J3:M3').activate();
  spreadsheet.getRange('J3:M3').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('Q3').activate();
  spreadsheet.getRange('Q3').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('S3').activate();
  spreadsheet.getRange('S3').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);}
  
var r4 = sheet.getRange("C4").getValue();
if (r4 != 0){
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('C4:E4').activate();
  spreadsheet.getRange('C4:E4').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('J4:M4').activate();
  spreadsheet.getRange('J4:M4').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('Q4').activate();
  spreadsheet.getRange('Q4').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('S4').activate();
  spreadsheet.getRange('S4').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);}

var r5 = sheet.getRange("C5").getValue();
if (r5 != 0){
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('C5:E5').activate();
  spreadsheet.getRange('C5:E5').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('J5:M5').activate();
  spreadsheet.getRange('J5:M5').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('Q5').activate();
  spreadsheet.getRange('Q5').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('S5').activate();
  spreadsheet.getRange('S5').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);}

}

标签: javascriptgoogle-sheets

解决方案


你能再解释一下你的问题吗?我尝试了您的代码,但它没有复制电子表格中的任何值。

您尝试做的是,用户正在选择一个单元格,然后该功能会自动复制 vlaues?

或者只是,当他使用 Vlookup 时?这也是一个功能吗?OnEdit 触发器仅适用于用户事件。

function onEdit(e) {
var sheet = SpreadsheetApp.getActiveSheet();

  var actRng = e.source.getActiveRange();
  var editColumn = actRng.getColumn();
  var index = actRng.getRowIndex();
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
  var updateCol = headers[0].indexOf("Project List"); updateCol = updateCol+1;
  if (index > 1 &&editColumn == updateCol) { // only timestamp if 'Last Updated' header exists, but not in the header row itself!
    var cell1 = sheet.getRange(index, updateCol+2, 1, 3)
    #                          row, column, num of rows, num of colums
    cell1.setValue("Test1");
    var cell2 = sheet.getRange(index, updateCol+10, 1, 4)
    cell2.setValue("Test2");
    var cell3 = sheet.getRange(index, updateCol+17, 1, 1)
    cell3.setValue("Test3");
  }
}

推荐阅读