javascript - 用于格式化电子表格的 Google 脚本制作工具

标签 javascript google-apps-script google-sheets

这是我第一次发帖,所以如果我遗漏了任何重要细节,请耐心等待。

无论如何,总结一下这个问题:我一直在尝试让一个脚本在 Google 脚本制作器上运行,以格式化连接到表单的电子表格,以便直接转到我的电子邮件。

所以基本上用户表单 --> 电子表格 --> 我的电子邮件

问题非常标准:

  1. 有什么问题吗?
  2. 您在哪里

但是我想使用的一个问题是“这个问题的优先级是什么?”高还是低。我有多项选择格式,所以它是一个简单的选择。

我想要的伪代码:

if (priority = low) put #priority low onto the email

很简单,但是我似乎无法让它工作,这是我的代码:

function sendFormByEmail(e) 
{    
    // Remember to replace XYZ with your own email address
    var email = "email"; 

    var subject = "Help Desk Form Submitted";  

    var s = SpreadsheetApp.getActiveSheet();
    var headers = s.getRange(1,1,1,s.getLastColumn()).getValues()[0];    
    var message = ""; 
    var priority = "";

    if(message.indexOf("What is the priority of this problem? =           Low")){
        priority += "#priority low";
    }
    else
        priority == "GFHHFFHAHFH ";

    for(var i in headers){
        message += headers[i] + ' =  \t \t'+ e.namedValues[headers[i]].toString() + "\n\n";  }

    if (message.indexOf("What is the priority of this problem? =           Low"))
        message += "This is a test";
    else
        message += "This is not a test";

    MailApp.sendEmail(email, subject, message); 
}

最佳答案

让我们看一下 if(message.indexOf()... 的第一个实例。它有一些问题:

  • 前几行,message 被设置为空字符串...因此您在其中找不到“优先级”字符串。

  • if 语句将 indexOf() 的返回值视为 bool 值。但是,当未找到某个项目时,.indexOf() 的返回码为 -1,这是“true-ish”。如果找到该字符串,并且该字符串位于搜索主题的开头,则返回将为 0,即“false-ish”。如果在任何其他位置找到它,则该值将为“>0”,也是“true-ish”。

  • else 中存在拼写错误。比较 == 应该是赋值 =,或者如果您愿意的话 +=

  • 看周围的代码,这一段看起来像是以前版本留下的,可以删除。

现在看第二个实例。

  • 现在应该填充消息。但是,比较仍然使用 .indexOf() 的错误 bool 解释。

  • 搜索字符串包含一批空格...但是之前循环响应的代码使用制表符将“标题”与“值”分开,因此搜索将始终返回“-1”(这将被解释为true)。

还有一些其他的整理项目。您可能需要:

function sendFormByEmail(e) 
{    
  Logger.log(JSON.stringify(e));
  var email = Session.getEffectiveUser().getEmail();
  var subject = "Help Desk Form Submitted";  
  var message = ""; 

  var s = e.range.getSheet(); // Sheet that received form response
  var headers = s.getDataRange().getValues()[0];   

  for (var question in headers) {
    message += headers[question] + ' = \t\t' + e.values[question] + '\n\n';
  }

  // Add text relative to the priority of the reported issue.
  if (e.namedValues["What is the priority of this problem?"].toString() === "Low")
    message += "This is a test";
  else
    message += "This is not a test";

  Logger.log(message);
  MailApp.sendEmail(email, subject, message); 
}

PS:您会明白为什么建议保持表单问题简短,例如“优先级”,并将解释性句子保留为辅助文本!

关于javascript - 用于格式化电子表格的 Google 脚本制作工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17973497/

相关文章:

google-apps-script - 在谷歌文档中插入日期时间

javascript - 根据条件将单元格值从一张谷歌工作表复制到另一张谷歌工作表

javascript - 有没有办法让某些字符串或值与 JS 中的其他字符串或值等效?

javascript - Firefox 加载项可以针对非 HTML 请求(例如图像)运行吗?

Javascript 捕获按键

javascript - 如何修补 console.error 或 info 但保留 Firebug 的跳转 url 不变?

php - 使用服务帐户从 PHP 调用 google apps 脚本执行 api

javascript - Chrome 应用 : Execute function defined in an app window from a background script

google-apps-script - 为什么通过 Google Apps 脚本加载到 Bigquery 的数据仅限于 513 行数据?

javascript - Google 脚本 - 用于多张工作表的一个运行编辑脚本