Google Sheet Add-on获取用户电子邮件

时间:2015-03-04 23:01:36

标签: google-apps-script google-sheets

我在商店中发布了Google Sheet附加组件。但我无法收回用户的电子邮件。

在屏幕上加载app(侧边栏)时,在Code.js,onStartup()上。

function onStartup() {
  return Session.getActiveUser().getEmail();
}

在我的客户端javascript上,这是我调用onStartup()的方式。

google.script.run
        .withSuccessHandler(
          function(ret, scope) {
            console.log(">>> user email is: " + ret);
          })
        .withFailureHandler(
          function(msg, scope) {
          })
        .withUserObject()
        .onStartup();

编辑:

如果您正在使用附加组件,请尝试使用getEffectiveUser()。

2 个答案:

答案 0 :(得分:3)

这在我的测试中起作用,它最初给我一些问题的原因不明:

示例:https://docs.google.com/spreadsheets/d/1zevasz5XjumO92qOwYIvsqoUPkzyB9EBD27pWH2I5e0/copy

code.gs

function onOpen() {
  var ui = SpreadsheetApp.getUi()
  var menu = ui.createAddonMenu().addItem('Launch Sidebar', 'sidebar').addToUi();
}

function sidebar(){
   var ui = SpreadsheetApp.getUi();
  var html = HtmlService.createHtmlOutputFromFile("Sidebar.html")
  .setSandboxMode(HtmlService.SandboxMode.IFRAME)
  .setTitle("Sidebar Listbox");
  ui.showSidebar(html);
}

function getListItems(){
  var activeUser = "Active User";
  var effectiveUser = "Effective User";
  try{
    activeUser = Session.getActiveUser().getEmail();
  } catch(err1){
    activeUser = err1;
  }
  try{
    effectiveUser = Session.getEffectiveUser().getEmail();
  } catch(err2){
    effectiveUser = err2; 
  }
  var returnArray = [activeUser,effectiveUser]; 
  return returnArray;
}

Sidebar.html

  <link rel="stylesheet" href="//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css">
  <link rel="stylesheet" href="/resources/demos/style.css">

<p>
Effective User: <span id="effectiveUser"></span>
</p>
<p>
Active User: <span id="activeUser"></span>
</p>


  <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  <script src="//code.jquery.com/ui/1.11.2/jquery-ui.js"></script>

  <script>
  $(function() {    //This function runs automatically when the sidebar is opended  
        google.script.run.withSuccessHandler(loadListItems).withFailureHandler(fail).getListItems();
  });


    function loadListItems(returnedData){
    $( "#effectiveUser" ).html(returnedData[0]);
    $( "#activeUser" ).html(returnedData[1]);   
  }
     function fail(){
        //update the field with the id of yourChoice
      $( "#effectiveUser").html("<strong> Opps, something went wrong.... </strong>");
  }
  </script>

答案 1 :(得分:0)

发件人:https://developers.google.com/apps-script/reference/base/session#getactiveuser

  

...在任何允许以下情况的情况下,用户的电子邮件地址不可用   无需用户授权即可运行的脚本,就像一个简单的脚本    onOpen(e) onEdit(e)触发器,是Google表格中的自定义功能,或者   部署到“以我的身份执行” (即由   开发人员而不是用户)

.getEffectiveUser()确实是更好的选择,尤其是在涉及自定义功能的情况下。