在Google脚本中从多个Google表格中查询的最佳方法是:索引列

问题描述 投票:0回答:1

背景:

我正在创建一个Google脚本应用,该应用用于批准/拒绝应用。我有三张互相引用的表,就像带有外键的数据库。

工作表:

应用程序>>

(primary key)
appid           |   userid  |   startdate   |   submitteddate   |   firstname   |   lastname    | ...
  • 此工作表每个申请人/用户名都有一行((并非所有用户都会有申请)] >>

    批准

(primary key)       (foreign key Application)    (foreign key Admin)
approvalid      |   appid                       |   adminid         |   reviewernotes   |   approvalstatus  |   ...
  • 此工作表在每个应用程序/应用程序中都有多行,不同的管理员将考虑他们的想法/注释

    Admin

(primary key)
adminid         |   adminemail  |   role
  • 此工作表包含每个管理员的角色

    我将检查管理员是否具有访问/评论/批准或拒绝应用程序的特定角色。这些评论存储在“批准”选项卡中。

  • 当前,管理员信息登录到应用程序后即会设置。我想为它们执行多个过程,包括几个获取,添加和编辑功能。

问题:

我知道最好

的做法是限制对Google表格的调用[1]。所以我正在寻找best方式来访问这些数据。具体来说,要进行类似getApprovalsForAdmin(adminid)的调用,该调用将返回一个对象,该对象将“应用程序”和“批准”选项卡中的数据组合在一起。

我知道这可以通过以下方式完成:

function getApprovalsForAdmin(adminid)
{
  var approvals = [];
  var ss = SpreadsheetApp.openById (spreadsheet_id)
  var sheet = ss.getSheetByName ("Approvals");
  var values = sheet.getDataRange ().getValues ();
  values.forEach (function (value) {
    if (values [2] == adminid){
      approvals.push (value);
    }
  });

  var return_values = [];
  sheet = ss.getSheetByName ("Application");
  var applications = sheet.getDataRange ().getValues ();
  applications .forEach (function (application){
    approvals.forEach (function (approval){
      if (application [0] == approval [1]){
        return_values.push (createReturnValue (application, approval));
      }
    });
  });

  return (return_values);
}

但是,这确实有两个单独的ss.getSheetByName(...)调用。

  • 有没有办法只用一个电话就能做到这一点?

    我的搜索和解答:

    第一

  • 我已经看到人们用一张纸将所有数据合并在一起,但是我不确定这是最好的解决方案,因为人们通过批准提交申请或评论的方式很不顺畅。合并的工作表将经常更新,并且可能导致更多的同步问题。

第二

我找到的最接近的答案:Using Google Scripts to Query Multiple Google Sheets to A View写于2018年7月。

给出的唯一解决方案是该人应该使用传统数据库。我正试图快速做到这一点,尽管数据变化很大,但它不会发展成为一件大事。在我的情况下,这听起来像是过分杀伤了。

第三

此标题看起来很有希望:Fetch values from multiple sheets Google sheets但是,该解决方案涉及对spreadsheet.getSheetByName("name")进行服务器调用,这正是我想知道是否可以简化的。

========================== >>

脚注

[[1] https://developers.google.com/apps-script/guides/support/best-practices

背景:我正在创建一个Google脚本应用,该应用用于批准/拒绝应用。我有三张互相引用的表,就像带有外键的数据库一样。表格:...

function getApprovalsForAdmin(adminid) {
  var approvals=[];
  var ss=SpreadsheetApp.openById(spreadsheet_id)
  var sheet=ss.getSheetByName("Approvals");
  var range=sheet.getDataRange();//added you may want to limit the range
  var values=range.getValues();
  values.forEach(function(value){
    if(value[2]==adminid){
      approvals.push(value);
    }
  });
  var return_values=[];
  sheet=ss.getSheetByName("Application");
  range=sheet.getDataRange();//added you may want to limit the range
  var applications=range.getValues();
  applications.forEach(function (application){
    approvals.forEach(function (approval){
      if (application[0]==approval[1]){
        return_values.push (createReturnValue(application, approval));//function undefined here
      }
    });
  });
  return (return_values);
}
google-apps-script google-sheets
1个回答
0
投票
function getApprovalsForAdmin(adminid) {
  var approvals=[];
  var ss=SpreadsheetApp.openById(spreadsheet_id)
  var sheet=ss.getSheetByName("Approvals");
  var range=sheet.getDataRange();//added you may want to limit the range
  var values=range.getValues();
  values.forEach(function(value){
    if(value[2]==adminid){
      approvals.push(value);
    }
  });
  var return_values=[];
  sheet=ss.getSheetByName("Application");
  range=sheet.getDataRange();//added you may want to limit the range
  var applications=range.getValues();
  applications.forEach(function (application){
    approvals.forEach(function (approval){
      if (application[0]==approval[1]){
        return_values.push (createReturnValue(application, approval));//function undefined here
      }
    });
  });
  return (return_values);
}
© www.soinside.com 2019 - 2024. All rights reserved.