单击按钮时,电子表格功能不会运行

时间:2016-06-20 19:09:35

标签: javascript google-apps-script google-sheets

我之前问过two-part question,只有一部分被回答然后关闭,而另一部分没有得到答复。我正在重新询问这一部分。

我负责为我的团队创建一个“自动”项目跟踪表。在有人按下按钮的意义上自动记录,它会记录日期/时间戳,并自动计算他们在所述项目上花费的时间。

但是,当我将脚本连接到Google绘图作为按钮时,它没有做任何事情,我无法弄清楚原因。

以下是我的电子表格的样子,其中一个按钮(图纸)配置为在点击时运行timeStamp()功能:

screenshot

您还可以获得电子表格here的副本。

到目前为止我得到的代码:

function timeStamp() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];

  var timezone = ss.getSpreadsheetTimeZone;
  var timeFormat = "hh:mm a";

  var lastCol = sheet.getLastColumn();
  var lastRow = sheet.getLastRow();
  var lastCell = sheet.getRange(lastRow, lastCol);
  var timeStampCell = sheet.getRange(lastRow, lastCol + 1);


  if(timeStampCell === " ") {
    var date = Utilities.formatDate(new Date(), timezone, timeFormat); 
    timeStampCell.setValue(date);
  };
}

1 个答案:

答案 0 :(得分:0)

var timeStampCell = sheet.getRange(lastRow, lastCol + 1);

...将timeStampCell设置为Range对象。

if(timeStampCell === " ") {

...将Range对象与包含单个空格字符的String进行比较。比较总是false,因为类型不同。如果==用于与允许的类型强制进行比较,它仍会评估false,因为操作数只是不同。

您可能想要单元格的内容,并将它们与空字符串进行比较:

if(timeStampCell.getValue() === "")

注意:使用===注意电子表格单元格的内容。如果比较是针对Date对象的,===仅在两个操作数完全相同的对象时才会评估true。见Which equals operator (== vs ===) should be used in JavaScript comparisons?

在此示例中,您并不关心电子表格中的数据类型,只是它是空白的。因此,您可以使用==

if(timeStampCell.getValue() == "")

另一个问题,在这里:

var timezone = ss.getSpreadsheetTimeZone;

这将获得对电子表格的引用" getSpreadsheetTimeZone"方法,但它告诉你时区。要获得方法的结果,您需要通过包含括号来调用它:

var timezone = ss.getSpreadsheetTimeZone();

通过这两项更改,该脚本适合我。