0

这是我当前的代码:

function doGet() { 
var app = UiApp.createApplication().setTitle('When Am I Eligible?');
var panel = app.createVerticalPanel().setHeight("400px").setWidth("400px");
//var submitButton = app.createButton('Check');


var key= '???'
var ss = SpreadsheetApp.openById(key);
  var sh = ss.getSheetByName('SHEET');
  var last=ss.getLastRow();
  var data=sh.getRange(1,1,last,2).getValues();
  var valB= Session.getEffectiveUser();
  for(nn=0;nn<data.length;++nn){
    if (data[nn][1]==valB){
      var final = data[nn][0]
      break} ;// if a match in column B is found, break the loop
      }
// var finish = data[nn][0];
 var app = UiApp.getActiveApplication();
 //var statusLabel = app.createLabel().setVisible(true).setText(String.valueOf(finish))
 var answer = app.createLabel("BRO").setVisible(true).setText(final)
 panel.add(answer);
 app.add(panel);
  return app;
}

它在我下面运行良好,但如果在我们的域下登录的其他人使用它,它说他们需要与他们共享电子表格。电子表格的性质阻止了这一点。有没有办法解决?

4

3 回答 3

1

在这种情况下,可以通过编写两个脚本来解决此问题。

脚本 1:这是作为您运行并访问电子表格的脚本。就像是

function doGet(e){
  var key= '0Anzdf0g-SCsDdDF1WEVrYjZyclIzMkdmZjVYUTdXN2c'
  var ss = SpreadsheetApp.openById(key);
  var sh = ss.getSheetByName('SHEET');
  var last=ss.getLastRow();
  var data=sh.getRange(1,1,last,2).getValues();

  var valB = e.parameter.user; //Read it from e.

  for(nn=0;nn<data.length;++nn){
    if (data[nn][1]==valB){
      var final = data[nn][0]
      break} ;// if a match in column B is found, break the loop
      }
  return ContentService.createTextOutput(final);
}

脚本 2:此脚本以运行您调用脚本 1 的 UI 的用户身份运行

function doGet() { 
var app = UiApp.createApplication().setTitle('When Am I Eligible?');
var panel = app.createVerticalPanel().setHeight("400px").setWidth("400px");
//var submitButton = app.createButton('Check');

var final = UrlFetchApp.fetch('URL OF SCRIPT 1 PUBLISHED AS A SERVICE');
// var finish = data[nn][0];
 var app = UiApp.getActiveApplication();
 //var statusLabel = app.createLabel().setVisible(true).setText(String.valueOf(finish))
 var answer = app.createLabel("BRO").setVisible(true).setText(final)
 panel.add(answer);
 app.add(panel);
  return app;
}
于 2013-06-08T00:55:52.643 回答
0

我相信我已修复它,似乎当我将电子表格的共享设置设置为域内具有链接的任何人时,域内访问页面的人会看到脚本正常运行而无需将其添加到他们的驱动器中。谢谢你的帮助。

于 2013-06-11T13:37:32.343 回答
0

最简洁的答案是不。

一种可能的解决方法是将数据存储在与脚本链接的 scriptdB 中,从而继承应用程序的访问权限。

该数据库应填充源电子表格中的数据,并在每次修改电子表格时重新同步(此过程可以通过电子表格中的一些触发器自动完成)

当然,这意味着您的脚本会发生一些深刻的变化,但保证数据隐私是值得的。

作为一个非常简单的示例,我使用一个小代码从 SS 中获取 2 列数据:

function getlistFromSS(){
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sh = ss.getSheets()[0];
  var last =  ss.setActiveSheet(ss.getSheets()[0]).getLastRow();
  var list = sh.getRange(1,1,last,2).getValues(); 
  var key = [] ; var value = []
  deleteDb()
    for(cc=0;cc<list.length;++cc){
      key.push(list[cc][0]);
      value.push(list[cc][1]);
      }
    for(cc=0;cc<key.length;++cc){
      var db = ScriptDb.getMyDb()
      db.save({name:key[cc], url:value[cc]})    
        Logger.log(key[cc]+'   '+value[cc])
      }
    }
于 2013-06-07T19:14:25.663 回答