背景:
我正在创建一个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);
}