我之前问过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);
};
}
最佳答案
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();
通过这两项更改,该脚本对我有用。
关于javascript - 单击按钮时电子表格功能不运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37930059/