相关疑难解决方法(0)

有没有更好的方法在JavaScript中执行可选的函数参数?

我总是在JavaScript中处理可选参数,如下所示:

function myFunc(requiredArg, optionalArg){
  optionalArg = optionalArg || 'defaultValue';

  // Do stuff
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?

是否有任何使用||这种情况会失败的情况?

javascript arguments function

805
推荐指数
11
解决办法
39万
查看次数

如何调试Google Apps脚本(又名Logger.log登录到哪里?)

在Google表格中,您可以添加一些脚本功能.我正在为onEdit活动添加一些东西,但我不知道它是否有效.据我所知,你不能从Google表格中调试一个直播事件,所以你必须从调试器中做到这一点,这是没有意义的,因为传递给我的onEdit()函数的事件参数将始终是未定义的,如果我从它运行它Script Editor.

因此,我试图在调用函数Logger.log时使用该方法记录一些数据onEdit,但这似乎只有在从函数运行时才有效Script Editor.当我从中运行它时Script Editor,我可以通过转到查看日志View->Logs...

我希望能够在事件实际执行时看到日志,但我无法理解.

我该如何调试这些东西?

google-sheets google-apps-script

114
推荐指数
7
解决办法
9万
查看次数

从数组中删除空字符串,同时保持记录无循环?

这里提出了这个问题: 从数组中删除空字符串,同时保留非空字符串索引的记录

如果你注意到@Baz给出的那个;

"I", "am", "", "still", "here", "", "man"
Run Code Online (Sandbox Code Playgroud)

"并且由此我希望生成以下两个数组:"

"I", "am", "still", "here", "man"
Run Code Online (Sandbox Code Playgroud)

这个问题的所有答案都提到了一种循环形式.

我的问题:是否有可能在没有任何循环的情况下删除所有indexes empty string ...除了迭代数组之外还有其他选择吗?

可能是我们不知道的一些regex或一些jQuery

所有答案或建议都非常感谢.

javascript arrays string indexing removeall

84
推荐指数
3
解决办法
9万
查看次数

在Google Apps脚本中调试自定义功能

我正在尝试在Apps脚本中为Google电子表格创建我的第一个自定义函数,并且我很难使用调试器.

我正在研究Google文档中的自定义函数演示代码,我在自定义函数drivingDistance(origin, destination)中设置了一个断点,该函数在我的电子表格的单元格中使用.我遇到的问题是,调试器显示传递给函数的参数undefined.但是,执行期间创建的任何其他变量的内容都会正确显示(只要它们不依赖于输入参数).

有趣的是,虽然输入参数显示为未定义,但函数的计算成功,因此这似乎是一个调试器问题.不幸的是,这个问题阻止我成功学习创建和调试自己的代码(因为我将不得不使用复杂的输入参数).

我感觉问题与Apps脚本的服务器端执行有关,因此我尝试使用Logger类记录输入参数,并且我还尝试将这些变量复制到新的局部变量中.但我想出的只是undefined.

另一个奇怪的提示是,typeof参数返回String.但是获取它们的长度会引发错误并尝试将它们与另一个字符串连接起来会返回字符串"undefined"(请参阅​​我的屏幕转储).

在此输入图像描述

我正在寻找有关这里发生的事情的见解.

google-docs google-sheets google-apps-script custom-function

33
推荐指数
2
解决办法
1万
查看次数

如何让onFormSubmit自动触发?

您提供的"修复"(test_onformsubmit)代码,每次电子表格中有新数据时,我都必须手动运行它.我希望它在提交表单时自动将pdf发送到电子邮件.有办法吗?因为手动方式运行代码完全像它应该的那样,但我希望这是一个自动事件,所以我不需要做任何事情.

查看原始问题/问题的父线程

google-sheets google-apps-script

13
推荐指数
1
解决办法
3万
查看次数

使用GAS为Google电子表格编写"撤消"功能

目前undo(),电子表格/表格/范围类中没有Google Apps脚本功能.在问题跟踪器上打开了一些问题,我现在只能找到一个(我不知道Triaged的含义):这里.

有人提出使用DriveApp和修订历史记录的变通方法,但我环顾四周并没有找到任何东西(也许它被埋没了?).无论如何,undo()对于许多不同的操作来说,功能是非常必要的.我只能想到一种解决方法,但我无法让它工作(数据的存储方式,我不知道它是否可能).这是一些伪 -

function onOpen () {
  // Get all values in the sheet(s)
  // Stringify this/each (matrix) using JSON.stringify
  // Store this/each stringified value as a Script or User property (character limits, ignore for now)
}

function onEdit () {
  // Get value of edited cell
  // Compare to some value (restriction, desired value, etc.)
  // If value is not what you want/expected, then:
  // -----> get the stringified value and parse …
Run Code Online (Sandbox Code Playgroud)

google-sheets google-apps-script

5
推荐指数
2
解决办法
3899
查看次数

从另一个应用程序(IFTTT)写入单元格时触发电子邮件

所以这就是我一直在做的事情.我是一名篮球教练并且有一个电子表格可以从IFTTT.com获取所有玩家的推文(它基本上是获取推特列表的RSS提要,当它更新时,它会更新电子表格).

我一直致力于编码,基本上说"如果玩家发布不恰当的词,请立即给我发电子邮件."

我已经得到了代码,如果我只输入一个不合适的单词,它会将单元格变为红色并通过电子邮件发送给我.但是,在IFTTT通过推文自动更新电子表格之后,我还没想出如何让代码给我发电子邮件.

到目前为止,这是我的代码.现在我只有一个"触发"字,即"玩家"只是试图让电子表格工作.这是代码:

function onEdit(e) {
    var ss = SpreadsheetApp.getActiveSpreadsheet();//Get the spreadsheet
    var sheet = ss.getActiveSheet()//Get the active sheet
    var cell = ss.getActiveCell().activate();//Get the active cell. 
    var badCell = cell.getA1Notation();//Get the cells A1 notation.
    var badCellContent = cell.getValue();//Get the value of that cell. 


    if (badCellContent.match("players")){
        cell.setBackgroundColor("red")
        MailApp.sendEmail("antadrag@gmail.com", "Notice of possible inappropriate tweet", "This tweet       says: " + badCellContent + ".");
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是我正在使用的电子表格的链接:https://docs.google.com/spreadsheets/d/1g5XaIycy69a3T2YcWhcbBy0hYrxSfoEEz8c4-zP63O8/edit#gid=0 非常感谢任何帮助或指导!谢谢!

google-apps google-sheets google-apps-script

5
推荐指数
1
解决办法
5010
查看次数

在onFormSubmit触发器中获取TypeError?

我使用Google表单教程调整表单数据以合并为PDF,然后发送到电子邮件.我尝试运行脚本时收到以下错误消息:

TypeError:无法从undefined中读取属性"values".(第11行,文件"代码")

我不知道如何解决这个问题.我在网上搜索了一个答案.这是脚本的副本.我标记了脚本出错的2行:

var docTemplate = "1ZSqmId2BBjtz6PmgQEmusjnkHGsFKD1CBSq0rrQk6Kc";  
var docName     = "TestCertificate";

// When Form Gets submitted

function onFormSubmit(e) {

//Get information from form and set our variables 

var email_address = "EMAIL@example.com";

//**(THIS IS WHERE THE ERROR IS OCCURRING ON THESE 2 LINES BELOW!)**

var full_name = e.values[2];
var Activity = e.values[3];

// Get document template, copy it as a new temp doc, and save the Doc’s id

var copyId = DocsList.getFileById(docTemplate)
.makeCopy(docName+' for '+full_name)
.getId();

// Open the temporary document …
Run Code Online (Sandbox Code Playgroud)

google-sheets google-apps-script

4
推荐指数
1
解决办法
8467
查看次数

类型错误:无法从未定义中读取属性“源”。(第 7 行,文件“代码”)

我在 Google Sheets 中遇到问题 TypeError: Cannot read property "source" from undefined. (第 7 行,文件“代码”)运行以下代码时请帮忙

function onEdit(event)
{ 
  var timezone = "GMT-5";
  var timestamp_format = "MM-dd-yyyy-hh-mm-ss"; 
  var updateColName = "Ticket#";
  var timeStampColName = "TimeComplete";
  var sheet = event.source.getSheetByName('InAndOut');


  var actRng = event.source.getActiveRange();
  var editColumn = actRng.getColumn();
  var index = actRng.getRowIndex();
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
  var dateCol = headers[0].indexOf(timeStampColName);
  var updateCol = headers[0].indexOf(updateColName); updateCol = updateCol+1;
  if (dateCol > -1 && index > 1 && editColumn == updateCol) { …
Run Code Online (Sandbox Code Playgroud)

triggers runtime-error google-sheets google-apps-script

4
推荐指数
1
解决办法
3万
查看次数

如何传递函数参数的值并运行独立的 Google Apps 脚本?

从文档中,https://developers.google.com/apps-script/guides/standalone

\n\n

运行独立脚本

\n\n

编写脚本后,有两种方法可以从脚本编辑器运行函数:

\n\n
    \n
  • 选择“运行”菜单,然后选择要执行的函数的名称。

  • \n
  • 从工具栏的选择框中选择要执行的函数的名称,然后单击\xe2\x96\xb6。

  • \n
\n\n

它没有告诉我们如何将参数值传递给我想要运行的函数。

\n\n

那么如何将参数值传递给函数并运行这些函数呢?

\n

google-apps-script google-apps-script-editor

4
推荐指数
1
解决办法
2635
查看次数

如何从 Google 表单提交触发器功能访问电子表格

我在 Google Forms 脚本中有一个函数,可以将唯一 ID 添加到要添加到关联工作表的行。该函数在提交表单时触发。

这是我一直在使用的脚本的一个版本:-

function onFormSubmit(e) {
  // Get the active sheet
  var sheet = SpreadsheetApp.getActiveSheet();
  // Get the active row
  var row = sheet.getActiveCell().getRowIndex();
  // Get the next ID value.  
  var id = sheet.getRange("Z4").getValue();
  // Check of ID column is empty
  if (sheet.getRange(row, 1).getValue() == "") {
    // Set new ID value
    sheet.getRange(row, 1).setValue(id);
    sheet.getRange("Z4").setValue("Z4"+1)
  }
}
Run Code Online (Sandbox Code Playgroud)

在调试时我收到消息:-

类型错误:无法调用 null 的方法“getActiveCell”。(第 5 行,文件“CreateID”)

我尝试将代码裁剪为一个简单的setValue,但我遇到了同样的问题 - “无法调用方法...”,除了getActiveSheet.

该函数的触发器工作正常,因为我收到通知说该函数本身未能成功执行。我在网上查了一下,尝试了一些方法,但尚未找到解决方案。

所以我真正想要的是访问表单发布到的电子表格的正确方法。如果 SpreadsheetApp.getActiveSheet() 不是正确的方法,那么什么是?

这个脚本完全陌生,上次在 PLI …

javascript google-sheets google-apps-script google-sheets-api

3
推荐指数
1
解决办法
2331
查看次数

TypeError:无法从undefined中读取属性"range"

我写过这个谷歌应用程序脚本.目的:每次编辑"位置更新"脚本时,都应向"经纪人电子邮件"发送电子邮件. 这是电子表格的链接:

function onEdit(e) {
  var activateSheet = SpreadsheetApp.getActiveSpreadsheet();
  SpreadsheetApp.setActiveSheet(activateSheet.getSheetByName('Responses'));
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = e.range;
  var row = e.range.getRowIndex();//Gets the row the change was made to.  

  var timestamp = sheet.getRange(row, 1).getValues(); //Gets the email
  var load = sheet.getRange(row, 2).getValues(); //Gets the email
  var email = sheet.getRange(row, 3).getValues(); //Gets the email
  var location = sheet.getRange(row, 4).getValues(); //Gets the email
  var template = HtmlService.createTemplateFromFile("template");
 template.load = load;
 template.location =location;


  MailApp.sendEmail(email,"Hi","this is my email",{htmlBody: template.evaluate().getContent()});
   }
Run Code Online (Sandbox Code Playgroud)
<html>
<h1><b>This is …
Run Code Online (Sandbox Code Playgroud)

google-sheets google-apps-script

1
推荐指数
1
解决办法
8999
查看次数

调试由发布请求触发的 Google Apps 脚本?

我在 Google Sheets 中有一个简单的脚本,它由 Slack 中的命令触发,只是将 Slack 消息添加为新行。这是一个非常简单的功能,部署为 Web 应用程序并且可以正常工作:

function doPost(req) {
var sheet = SpreadsheetApp.openById('[My Sheet Id]');
var params = req.parameters;

Logger.log(params.text);

sheet.appendRow(params.text);

return ContentService.createTextOutput("Saved your entry:" + params.text);
}
Run Code Online (Sandbox Code Playgroud)

然而,Logger.log 函数从不在调试日志中记录任何内容。我希望它在这里:

在此处输入图片说明

奇怪的是,执行列表也是空的:

在此处输入图片说明

但是脚本正在被触发并将文本消息附加到 Google 表格中。

所以我想的问题归结为当由发布请求触发时,我如何从脚本(部署为 Web 应用程序)中准确登录,以及如何查看它的执行情况?换句话说,您如何调试此类脚本?

google-apps google-apps-script

1
推荐指数
1
解决办法
2254
查看次数