我有6列数据,然后是“最新更新”列,在这里我手动在行中写入上次更改的日期。我敢肯定有一种方法可以自动执行此操作,但是无法使其正常工作。
注意-我现在不怎么编码了,只是试图修改我在网络上找到的多个代码,但对我来说什么都没有用,
它基本上是化学物质的数据库,其中每一列都是一个属性,在上次更改任何属性时,我都需要盖章。有人可以帮我吗?
答案 0 :(得分:0)
没有必要使用脚本。使用公式可能会更容易:
=(your_datetime - date(1970;1;1) ) * 86400000
timestamp-to-date-and-back-screenshot
在此处查看示例:https://docs.google.com/spreadsheets/d/1JHr4z3-32fWYUAjm3bG_Wyr-ZXn7FUvrECa3B8TtJtU/edit?usp=sharing
答案 1 :(得分:-1)
您必须输入一些代码才能完成此工作。 This link很好地说明了如何为工作表创建脚本。
脚本最重要的部分是您希望每次在ANY单元格中对工作表进行更改时都运行它。然后,当它运行时,您可以检查更改了哪个单元,然后由他们确定该单元是否在您要检查的区域内。考虑这样设置的工作表:
设置工作表后,转到“工具”菜单,然后选择“脚本编辑器”。从那里,您将输入以下代码。我给您的例子是您必须进行更改以满足您的需求的示例。首先要了解的是function onEdit
。这是一个特别命名的函数,它将在每次更改工作表时运行。所以当你有
function onEdit(eventObj) {
}
然后,每次进行更改时(在用户键入Enter之后),将执行放在括号中的任何内容。因此,您的onEdit
函数如下所示:
function onEdit(eventObj) {
//--- you could set up a dynamic named range for this area to make it easier
var thisSheet = SpreadsheetApp.getActiveSheet();
var checkRange = thisSheet.getRange("B2:D5");
if (isInRange(checkRange, eventObj.range)) {
Logger.log('cell is in range');
var propertyCell = eventObj.range;
var timestampCell = thisSheet.getRange(propertyCell.getRow(), 5);
timestampCell.setValue(Utilities.formatDate(new Date(), "UTC+8", "MM-dd-yyyy hh:mm:ss"));
} else {
Logger.log('must be outside the range');
}
eventObj
是用户编辑和更改的单元格。因此,我们正在使用该单元格与我们要检查的区域进行比较。如果确定该单元格在该区域内,则继续并定义该单元格以保存时间戳,然后为其分配一个值。该值是格式化的日期和时间。
这里重要的是checkRange
变量,该变量定义为所有属性的区域。因此,当onEdit
函数运行时,它定义了您要检查的区域,然后调用isInRange
来查看已编辑的单元格是否在该区域内。这是函数:
function isInRange(checkRange, targetCell) {
Logger.log('checking isInRange');
//--- check the target cell's row and column against the given
// checkrange area and return True if the target cell is
// inside that range
var targetRow = targetCell.getRow();
if (targetRow < checkRange.getRow() || targetRow > checkRange.getLastRow()) return false;
Logger.log('not outside the rows');
var targetColumn = targetCell.getColumn();
if (targetColumn < checkRange.getColumn() || targetColumn > checkRange.getLastColumn()) return false;
Logger.log('not outside the columns');
//--- the target cell is in the range!
return true;
}
您的结果将如下所示:
现在,将所有代码复制并粘贴到脚本编辑器中:
function isInRange(checkRange, targetCell) {
Logger.log('checking isInRange');
//--- check the target cell's row and column against the given
// checkrange area and return True if the target cell is
// inside that range
var targetRow = targetCell.getRow();
if (targetRow < checkRange.getRow() || targetRow > checkRange.getLastRow()) return false;
Logger.log('not outside the rows');
var targetColumn = targetCell.getColumn();
if (targetColumn < checkRange.getColumn() || targetColumn > checkRange.getLastColumn()) return false;
Logger.log('not outside the columns');
//--- the target cell is in the range!
return true;
}
function onEdit(eventObj) {
//--- you could set up a dynamic named range for this area to make it easier
var thisSheet = SpreadsheetApp.getActiveSheet();
var checkRange = thisSheet.getRange("B2:D5");
if (isInRange(checkRange, eventObj.range)) {
Logger.log('cell is in range');
var propertyCell = eventObj.range;
var timestampCell = thisSheet.getRange(propertyCell.getRow(), 5);
timestampCell.setValue(Utilities.formatDate(new Date(), "UTC+8", "MM-dd-yyyy hh:mm:ss"));
} else {
Logger.log('must be outside the range');
}
}