【问题标题】:Google Apps Script performing Index & Match function between two separate Google SheetsGoogle Apps 脚本在两个单独的 Google 表格之间执行索引和匹配功能
【发布时间】:2017-01-31 21:55:28
【问题描述】:

我正在使用 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);
   }
  }
 }
}

【问题讨论】:

  • 如何编辑数组中的数据?在“for”循环中,有一个 setValue。它使用 getValues 检索“fsheet”的数据,在“for”循环中编辑数据数组。从“for”循环退出后,它使用“setValues”将编辑的数据数组覆盖到“fsheet”。我认为这会导致 API 的使用次数减少并加快速度。我很抱歉我的英语不好。

标签: google-apps-script google-sheets


【解决方案1】:

对您问题的评论非常正确。你正在做一些不必要的动作,比如

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)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多