我正在使用Google Apps脚本在两个单独的Google表格之间执行索引和匹配功能,并检索匹配的记录并填充指定的表格和列。虽然它运行得相当好,但我希望让脚本更高效地运行,因此使用的时间更少。有人可以看下面的代码示例,并为我提供建议/指示
function SiteIDLookup() {
var search_spreadsheet = SpreadsheetApp.openById("GoogleSheetId");
SpreadsheetApp.setActiveSpreadsheet(search_spreadsheet);
var find_spreadsheet = SpreadsheetApp.openById("GoogleSheetId");
SpreadsheetApp.setActiveSpreadsheet(find_spreadsheet);
var ssheet = search_spreadsheet.getSheetByName("schoolSiteID_Lookup");
var fsheet = find_spreadsheet.getSheetByName("Info_Formatted");
var FMaxR = fsheet.getMaxRows();
fsheet.getRange(2, 16, FMaxR, 1).clear({contentsOnly: true});
var findData = fsheet.getDataRange().getValues();
var searchData = ssheet.getDataRange().getValues();
for(var i=0; i < findData.length; i++) {
for(var j=0; j < searchData.length; j++) {
var find = findData[i][14];
var searchref = searchData[j][0];
if(find == searchref && find != "" ) {
var found = ssheet.getRange(j+1,2,1,1).getDisplayValue();
fsheet.getRange(i+1,16,1,1).setValue(found);
}
}
}
}
答案 0 :(得分:0)
对您的问题的评论非常正确。您正在执行不必要的操作,例如
SpreadsheetApp.setActiveSpreadsheet(search_spreadsheet);
SpreadsheetApp.setActiveSpreadsheet(find_spreadsheet);
哪个服务器没用。然后在循环内部执行不必要的操作
var found = ssheet.getRange(j+1,2,1,1).getDisplayValue();
考虑到你已经var searchData = ssheet.getDataRange().getValues();
命令行是冗余的,并且在每次迭代时执行以引导。数组中有2个数据集,需要使用数组并使用.setValues(array)
输出数据。有点像这样的东西(你必须检查索引等,因为我没有实际的纸张来测试它)
function SiteIDLookup() {
// --------------------------------------------------------------------
// This bit is purely cosmetic, I personaly hate declaring variables
// inside of loops or middle of the code
var i, j
var find
var searchref
var found = []
// --------------------------------------------------------------------
var search_spreadsheet = SpreadsheetApp.openById("GoogleSheetId");
var find_spreadsheet = SpreadsheetApp.openById("GoogleSheetId");
var ssheet = search_spreadsheet.getSheetByName("schoolSiteID_Lookup");
var fsheet = find_spreadsheet.getSheetByName("Info_Formatted");
var FMaxR = fsheet.getMaxRows();
fsheet.getRange(2, 16, FMaxR, 1).clear({contentsOnly: true});
var findData = fsheet.getDataRange().getValues();
var searchData = ssheet.getDataRange().getValues();
for (i = 0; i < findData.length; i++) {
for (j = 0; j < searchData.length; j++) {
find = findData[i][14];
searchref = searchData[j][0];
if (find == searchref && find != "" ) {
found[i] = searchData[j][1]
}
else {
found[i] = ['']
}
// found = ssheet.getRange(j+1,2,1,1).getDisplayValue();
// fsheet.getRange(i+1,16,1,1).setValue(found);
}
}
fsheet.getRange(2, 16, found.length, 1).setValues(found)
}