google-apps-script - 限制每个表格选项卡中的响应数量并通过 Apps 脚本考虑用户“首选项”的最佳方法是什么?
问题描述
我正在尝试编写一些应用程序脚本,根据他们的偏好将人员列表分类到不同的活动中。
例如,假设活动是游泳、绘画和电子游戏。我在表格中将这些活动中的每一个作为它们自己的单独选项卡。在 Google 表单中,我有一个复选框网格,他们可以使用它们来检查他们想要哪些活动作为他们的第一、第二或第三首选项。
约翰选择电子游戏作为他的第一偏好,游泳第二,绘画作为他的最后偏好。脚本应首先查看 John 的第一个偏好并尝试将他放在“视频游戏”工作表选项卡下。如果此活动“已满”(我正在考虑限制每个活动表中的行数……这行得通吗?),它将尝试增加到下一个偏好(游泳)并尝试将他放在该选项卡下反而。
我试图寻找类似的解决方案,但找不到任何东西。最初尝试创建一个数组,将人员的活动按照他们的偏好顺序添加到所述数组中,然后如果工作表已满,则递增到下一个活动,但它并没有像我希望的那样成功。希望有任何关于如何实现这一目标的想法!
解决方案
如果没有有关如何设置数据或您可能尝试过的某些代码的更多信息,很难给您一个完整的答案。
选项 1:如果首选项已达到最大值,请检查 Javascript
您在评论中说您只执行此脚本一次,如果是这种情况,您可以创建一个“字典”(看看Associative Arrays)并将所有信息存储在那里以供以后插入。
var dictionary = {};
dictionary["swimming"] = [];
dictionary["videoGames"] = [];
dictionary["painting"] = [];
之后,如果数组已满,您可以检查每个首选项:
// After checking the preference exists
if dictionary[preference].length > 10: // 10 participants max
Logger.log("This preference is full");
else:
dictionary[preference].push(variable); // Whatever you want to insert here
之后当然只需在相应的工作表中插入所有变量。
选项 2:直接插入纸张并检查是否已满
另一种选择可能是直接插入工作表,检查工作表是否已经用完。
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(preference);
if sheet.getLastRow() > 10:
Logger.log("This preference is full");
else:
sheet.appendRow(["1st column", "2nd column", "3rd column"]);
如果您想查看这些功能的参考。
推荐阅读
- bluetooth - 是否有任何支持 MacOS/Linux/Unix 的蓝牙 4.0(支持 LE)USB 适配器?
- linq - GroupBy OrderBy Linq - 无效列
- wordpress - 如何在本机反应中为来自 WordPress API 的动态块添加轮播?
- haskell - 在 Haskell (GHCI) 中声明函数类型?
- azure-cosmosdb - Microsoft.Azure.Documents.Spatial.Point 的 JSON 序列化的 Asp.net 核心问题
- css - React Native,(使用响应式网格)组件太大的问题
- scala - 在集群(纱线)上运行火花作业时,内容未保存在文件中
- python - 如何向 Flask 发送 AJAX 请求
- php - 致命错误:未捕获的异常
- c# - 简单的注入器如何将批量注册的泛型类型注入构造函数