我之前问过two-part question,只有一部分被回答然后关闭,而另一部分没有得到答复。我正在重新询问这一部分。
我负责为我的团队创建一个“自动”项目跟踪表。在有人按下按钮的意义上自动记录,它会记录日期/时间戳,并自动计算他们在所述项目上花费的时间。
但是,当我将脚本连接到Google绘图作为按钮时,它没有做任何事情,我无法弄清楚原因。
以下是我的电子表格的样子,其中一个按钮(图纸)配置为在点击时运行timeStamp()
功能:
您还可以获得电子表格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);
};
}
答案 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();
通过这两项更改,该脚本适合我。