在提供带有应用脚本的编辑对话框的同时,将数据保存在Google电子表格中

时间:2014-05-24 00:15:15

标签: javascript google-apps-script

我有一个有趣的问题需要解决,而且我已经厌倦了将头撞在墙上。让我们来看看好的ol' Stack社区可以向我展示解决方案的好方法。

  • 我正在使用Google表单注册活动。数据被收集到电子表格中。到目前为止,非常好。

  • 当人们参加活动时,我会让注册文员与笔记本电脑连接到电子表格。当他们进来时,他们会在电子表格中找到该人,以检查他们是否出现。再一次,一切都是好的。

  • 现在有趣的部分:我希望注册文员能够在一个小的独立视图中将注册人的数据拉出来转动笔记本电脑。问题是我想要其他注册人'数据是私有的。

  • 我已经获得了一个小应用程序脚本来为此工作,但其他注册人'电子表格中的弹出窗口后面仍然可以看到数据。

  • 我尝试过使用背景颜色来编辑数据,隐藏行等等,但是会有很多职员使用相同的工作表 - 所以我猜这会妨碍其他人尝试与其他注册人执行相同的功能。

  • 我的下一步想法是使用一个独立的应用程序脚本Web应用程序来处理这个问题,但我需要从电子表格中获取所选行以传递给它。好像window.open似乎是禁止的,所以我想我会回到原点。

我已经耗尽了所有的智力,所以任何(我的意思是任何)帮助都非常感谢。

我认为可能最有效的愚蠢解决方案就是让弹出框变大,并要求用户不要点击" OK"当他们完成验证数据时。

谢谢!

2 个答案:

答案 0 :(得分:1)

执行此操作:使用菜单调出对话框。该对话框仅显示webapp的锚点URL,其中url参数指示所选行。 职员只需单击锚点,然后使用正确的选择打开webapp。

答案 1 :(得分:1)

这可能是一个过于简化的解决方案,但是在运行脚本之前,职员会选择不同的工作表(不同的选项卡)。如果脚本取决于活动单元格的内容,则无效。但您可以更改它,以便它读取Form响应表上的特定列,如getRange(“A2:A”)。getValues(),并使用这些值填充Formpanel中的ListBox。我创造了这样的东西已经有一段时间了,但我觉得它是这样的:

function select() {
var doc = SpreadsheetApp.getActiveSpreadsheet();
var sheet = doc.getSheetByName("FormResponses");
var app = UiApp.createApplication().setTitle('My Application');
var form = app.createFormPanel();
var flow = app.createFlowPanel();
var lb = app.createListBox().setName('name');
var values = doc.getRange("A2:A").getValues();
for (var i=0;i<values.length;i++) {
lb.addItem(values[i],i);
}
flow.add(lb);
flow.add(app.createSubmitButton("Submit"));
form.add(flow);
form.addSubmitHandler(app.createServerHandler("submitFunction"));
panel.add(button);
app.add(panel);
doc.show(app);
}

function submitFunction(e) {
var name = e.parameter.name;
var app = UiApp.getActiveApplication();
var doc = SpreadsheetApp.getActiveSpreadsheet();
var sheet = doc.getSheetByName("FormResponses");
var data = sheet.getRange("A2:G").getValues();
for (var i=0;i<data.length;i++) {
if (data[i][1] == name) {
var result = data[i];
break;
}
}
for (var i=0;i<result.length;i++) {
app.add(app.createLabel(result[i]));
}
return app;
}

然后,当您需要显示值时,您将从该ListBox中获取结果。