【发布时间】:2019-04-26 23:40:43
【问题描述】:
我是 Google Apps 脚本的新手。我创建了一个 Google Apps 脚本作为 vlookup 的替代品(出于某种原因,我想要静态数据)。
我创建了一个函数,它能够在工作表 1“主工作表”(用户输入)和工作表 2“查询工作表”(包含数据结果)之间进行通信。
目的是比较 mainSheet ColW 和 querySheet ColA
如果 mainSheet ColW 匹配,则将 mainSheet ColX 中的值替换为相应行中 querySheet ColB 的值。
例如,如果 mainSheet Col W2 为“123”且 querySheet Col A5 为“123”,则将 querySheet Col B5 中的值粘贴到 mainSheet Col X2 中
这是为了将用户提供的输入与 X 时间段后在后端更新的数据进行比较。为了减少不断查看这些数据的需要,查询会间隔运行。用结果填充用户表。
function match(){
//Sheet with the query outputs
var querySheet = SpreadsheetApp.openById("SHEETID123456789"); // query results are dumped in this doc
var querySheetTab = querySheet.getRange("query!A1:F"); //tab with the results
//Main sheet to have query data pasted
var mainSheet = SpreadsheetApp.getActiveSpreadsheet(); //current worksheet
var mainSheetTab = mainSheet.getRange("USERSHEET!W2:X"); //Tab and range of the data. W contains a number. X is where the results of B from the querySheet go
//values to compare
var mainSheetVal = mainSheet.getSheetByName('USERSHEET').getRange('W2:W').getValues(); //values to match against query results
var mainSheetComp = mainSheet.getSheetByName('USERSHEET').getRange('W2:W'); //numbers to match against query results
var mainSheetSet = mainSheet.getSheetByName('USERSHEET').getRange('X2:X'); //Where values get pasted.
var getValQS = querySheet.getSheetByName('query').getRange('A1:B').getValues(); //query results includes both objects values
var valQS = querySheet.getSheetByName('query').getRange('A1:A'); // query results
var valSet = querySheet.getSheetByName('query').getRange('B2:B'); //desired values to paste.
var output = [];
for (var i = 0; i < mainSheetVal.length; i++) {
mainSheetSet.setValue(getValQS[i][0]);
SpreadsheetApp.flush();
Utilities.sleep(10000);
if (mainSheetComp.getValue() == '') {
output.push([getValQS[i][0]]);
}
}
mainSheet.getRange(2, 12, output.length, 2).setValues(output);
}
此工作表最终将 X2:X 替换为 A1 的值,然后是 A2,并且即使使用空单元格也会继续循环。我无法设置正确的比较。
【问题讨论】:
标签: google-apps-script google-sheets