如果使用VLOOKUP

时间:2019-08-24 17:48:49

标签: javascript google-sheets

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

-该工作表的A列具有在同一文件的“ Projects”电子表格中找到的列表数据验证。

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

-“项目”上的数据使用IMPORTRANGE链接到另一个Google表格文件。该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);}

}

1 个答案:

答案 0 :(得分:0)

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

您尝试做的是,用户正在选择一个单元格,然后该功能自动复制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");
  }
}