-我有一个名为“位置”的电子表格。
-该工作表的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);}
}
答案 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");
}
}