首页 > 解决方案 > 限制每个表格选项卡中的响应数量并通过 Apps 脚本考虑用户“首选项”的最佳方法是什么?

问题描述

我正在尝试编写一些应用程序脚本,根据他们的偏好将人员列表分类到不同的活动中。

例如,假设活动是游泳、绘画和电子游戏。我在表格中将这些活动中的每一个作为它们自己的单独选项卡。在 Google 表单中,我有一个复选框网格,他们可以使用它们来检查他们想要哪些活动作为他们的第一、第二或第三首选项。

约翰选择电子游戏作为他的第一偏好,游泳第二,绘画作为他的最后偏好。脚本应首先查看 John 的第一个偏好并尝试将他放在“视频游戏”工作表选项卡下。如果此活动“已满”(我正在考虑限制每个活动表中的行数……这行得通吗?),它将尝试增加到下一个偏好(游泳)并尝试将他放在该选项卡下反而。

我试图寻找类似的解决方案,但找不到任何东西。最初尝试创建一个数组,将人员的活动按照他们的偏好顺序添加到所述数组中,然后如果工作表已满,则递增到下一个活动,但它并没有像我希望的那样成功。希望有任何关于如何实现这一目标的想法!

标签: google-apps-scriptgoogle-sheetsgoogle-forms

解决方案


如果没有有关如何设置数据或您可能尝试过的某些代码的更多信息,很难给您一个完整的答案。


选项 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"]);

如果您想查看这些功能的参考。


推荐阅读