javascript - 如果使用 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);}
}
解决方案
你能再解释一下你的问题吗?我尝试了您的代码,但它没有复制电子表格中的任何值。
您尝试做的是,用户正在选择一个单元格,然后该功能会自动复制 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");
}
}
推荐阅读
- sql - 大查询中的 charindex 函数
- django - 覆盖度静态分析应该在什么阶段进行?
- node.js - Node.js - Swagger - 无法呈现此定义
- php - 查询未插入数据库的失败数据
- android - 分享图片时如何更改图库中显示的应用名称?
- powershell - 将缺失属性值的 ROW 添加到 Export-CSV
- python - 如何检查每个观察值缺失的数量?
- cucumber-jvm - Cucumber java - 如何处理任何步骤定义的超时
- excel - 比较两个表格并仅标记相同的单元格绑定
- flutter - 在客户端中以管理员身份删除 Firebase 用户