Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在谷歌电子表格中保留私有数据,同时提供带有应用程序脚本的编辑对话框_Javascript_Google Apps Script - Fatal编程技术网

Javascript 在谷歌电子表格中保留私有数据,同时提供带有应用程序脚本的编辑对话框

Javascript 在谷歌电子表格中保留私有数据,同时提供带有应用程序脚本的编辑对话框,javascript,google-apps-script,Javascript,Google Apps Script,我有一个有趣的问题要解决,我厌倦了把头撞在墙上。让我们看看优秀的ol'Stack社区是否能为我提供解决方案的好方法 我正在使用谷歌表单注册一个活动。数据被收集到电子表格中。到目前为止,一切顺利 当人们参加活动时,我会让登记员用笔记本电脑连接电子表格。当他们进来时,他们会在电子表格中找到那个人,检查他们是否出现。再一次,一切都很美好 现在有趣的部分是:我希望注册人员在一个小的、独立的视图中打开笔记本电脑,查看注册人的数据。问题是我希望其他注册人的数据是私有的 我已经得到了一个小的应用程序脚本来处

我有一个有趣的问题要解决,我厌倦了把头撞在墙上。让我们看看优秀的ol'Stack社区是否能为我提供解决方案的好方法

  • 我正在使用谷歌表单注册一个活动。数据被收集到电子表格中。到目前为止,一切顺利

  • 当人们参加活动时,我会让登记员用笔记本电脑连接电子表格。当他们进来时,他们会在电子表格中找到那个人,检查他们是否出现。再一次,一切都很美好

  • 现在有趣的部分是:我希望注册人员在一个小的、独立的视图中打开笔记本电脑,查看注册人的数据。问题是我希望其他注册人的数据是私有的

  • 我已经得到了一个小的应用程序脚本来处理这个问题,但是其他注册者的数据仍然可以在电子表格的弹出窗口后面看到

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

  • 我的下一个想法是使用一个独立的应用程序脚本web app来处理这个问题,但我需要从电子表格中获取选定的行以传递给它。好像是
    窗口。打开
    是不可能的,所以我想我又回到了原点

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

我认为最有效的愚蠢解决方案可能是将弹出框变大,并要求用户在验证数据后不要点击“OK”


谢谢

执行此操作:使用菜单打开对话框。该对话框仅显示指向webapp的锚定url,其中包含指示所选行的url参数。
店员只需单击锚定按钮,webapp就会以正确的选择打开

这可能是一个过于简化的解决方案,但在运行脚本之前,让职员选择不同的工作表(不同的选项卡)。如果脚本依赖于活动单元格的内容,这将不起作用。但您可以更改它,使其读取表单响应表上的特定列,如getRange(“A2:a”).getValues(),并用这些值填充Formpanel中的列表框。我已经有一段时间没有创作过这样的东西了,但我认为它是这样的:

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;
}
函数选择(){
var doc=SpreadsheetApp.getActiveSpreadsheet();
var sheet=doc.getSheetByName(“FormResponses”);
var app=UiApp.createApplication().setTitle(“我的应用程序”);
var form=app.createFormPanel();
var flow=app.createFlowPanel();
var lb=app.createListBox().setName('name');
var values=doc.getRange(“A2:A”).getValues();

对于(var i=0;iYou甚至可以将该锚定设置为Google form responses行中的超链接,而不是一个全新的对话框以此类推。它将延伸到专栏下方,并制作一个指向Zig建议的Web应用程序的可点击链接。感谢您的回答!我试图避免繁琐的额外点击,但这绝对是一个可行的解决方案。不过,我决定走另一条路。虽然arrayformula是一个很好的改进,但请记住,很多时候即使有新行,heets也无法“增长”公式。这个错误已经存在多年了。这绝对不是一个过于简单的解决方案……我非常喜欢它。这里的问题是电子表格对于那些验证其信息的人的可读性。我决定使用一个大的弹出窗口(大到足以在固定的屏幕大小上覆盖其他人的数据)。这是最接近我所用的东西,所以我会将你的标记为正确。