有没有办法根据谷歌表格数据创建输出表单?



我想做的

这可能吗?
我想创建一个输出表单,用于从 Google 表格电子表格中读取数据。在表单中,用户将输入一些值(例如,输入他们的姓名和一些ID号(,并在连接的电子表格中查看相应的信息,但不会查看工作表中的任何其他信息。类似于 Microsoft Access 中的输出表单。我希望有一种方法可以使用现有工具和一些脚本在Google表格中完成此操作。

不过,更一般地说,任何在每个用户的基础上为Google表格数据创建这种"有限可见性"的方法都是有用的。(菜单中的"保护工作表"功能无法实现此目的;见下文。

作为参考,我目前的具体用例是作为教师,并希望学生能够从我的学生信息电子表格中查看与他们相关的特定信息,但同时不透露其他学生的信息。我会有一个简单的表格,他们在其中输入一个名字,也许还有一些我给他们的个性化代码,这样他们就可以看到他们的出勤记录或其他东西。出于我的目的,我不需要表单非常安全,因为没有一个信息是那么敏感(尽管更安全越好(,但我不想只是通过让他们访问整个工作表来将所有信息放在他们面前。

到目前为止我尝试过什么

我用两张纸制作了一个新的电子表格文件;一张纸是可见的,可以用作表单,第二张纸是不可见的(我通过"保护"菜单选项完成了(。我使用importrange()将相关数据从我的主电子表格读入到新电子表格的不可见工作表中。在可见的工作表上,学生从下拉列表中输入他们的姓名,然后输入他们的学生证作为验证。如果学生的姓名和 ID 匹配,则第一张工作表会执行vlookup(),以读取受保护工作表中的信息以及学生记录中的一些信息。

这是我所做的,以防我的描述没有意义:https://drive.google.com/open?id=1cHO2jzMh1mkXvlLh-M4eYqN7v11t95-GnfWqL5IwQ14&authuser=0

这有两个问题,一个小问题和一个大问题。

小问题是每个学生都可以同时看到"表格"表。如果两名学生同时打开电子表格,他们将看到另一名学生输入的任何信息。我通过编写一个简单的脚本来处理这个问题,以便在 20 秒后自动重置"表单"的输入单元格。此外,每当新人打开表单时,"表单"的输出单元格都会被删除。所以,显然不是一个绝妙的解决方案,但就我的目的而言,这基本上已经足够好了。

最大的问题是谷歌自己的预览查看器(内置于谷歌云端硬盘等(忽略了受保护的范围和工作表,并将整个内容显示为电子表格。(通常,受保护的工作表根本不可见,并且不会显示在屏幕底部的工作表列表中,除非查看者有权访问它们。
就我而言,这意味着包括根本不应该可见的受保护数据,呈现为打印预览,这意味着学生实际上能够在一个大表中查看所有其他学生的数据。

你熟悉 Web 应用程序吗?

应用程序脚本网络应用程序允许您将选定的Google文档内容输出到浏览器中。

因此,您可以使用Session.getActiveUser()方法来获取用户的电子邮件,并动态调整用户将要获取的数据(顺便说一句,您也可以在电子表格中使用Session.getActiveUser(),以自动检测用户而不是询问他的名字(。

简单的示例工作流:

  1. 通过学生电子邮件替换 A 列中的学生姓名(用户用于验证其会话和访问 Google 表格的 Gmail 地址(
  2. 内容类似于以下内容的脚本绑定到电子表格:
function doGet(){
var ss=SpreadsheetApp.getActive().getSheetByName('Data');
var range=ss.getDataRange();
var values=range.getValues();
var user=Session.getActiveUser(); 
var output="";
for(var i=1;i<ss.getLastRow();i++){
if(values[i][0]==user){
for(var j=1;j<ss.getLastColumn();j++){
output+=(values[i][j])+" ";
}
}
}
return ContentService.createTextOutput(JSON.stringify(output));
}

确保您具有doGet()函数和return语句。

  1. 手动运行脚本一次以触发授权流后,将其部署为 Web 应用程序 -User accessing the web app执行它并授予对Anyone的访问权限(除非另有需要(。
  2. 复制 Web 应用的 URL 并将其转发给学生。
  3. 当学生在浏览器中打开 URL 时 - 他们将获得结果 - 前提是他们的电子邮件列在工作表中。

请注意,提供的代码是一个简单的示例,它检索 所有数据并将其作为字符串输出。随意修改脚本 例如 仅检索感兴趣的列并将数据输出为 HTML 表,而不是简单的字符串。

最新更新