谷歌工作表应用程序脚本时间戳条件



这可能真的很简单,但我无法理解。

我有一个时间戳脚本,我从这个酷家伙复制

现在,我想做的是,如果a、B、C列中的单元格被更改或填充,则创建时间戳。

/**
* Creates a Date Stamp if a column is edited.
*/
//CORE VARIABLES
// The column you want to check if something is entered.
var COLUMNTOCHECK = [2,3];
// Where you want the date time stamp offset from the input location. [row, column]
var DATETIMELOCATION = [0,1];
// Sheet you are working on
var SHEETNAME = 'Sheet1'

function onEdit(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
//checks that we're on the correct sheet.
if( sheet.getSheetName() == SHEETNAME ) { 
var selectedCell = ss.getActiveCell();
//checks the column to ensure it is on the one we want to cause the date to appear.
if( selectedCell.getColumn() == COLUMNTOCHECK[0,1]) { 
var dateTimeCell = selectedCell.offset(DATETIMELOCATION[0],DATETIMELOCATION[1]);
dateTimeCell.setValue(new Date());
}
}
}

我曾认为,在if语句中添加一个带有var索引的子句可以解决这个问题。。将COLUMNTOCHECK更改为[2,3,4,5]等等。

if( selectedCell.getColumn() == COLUMNTOCHECK[0] || selectedCell.getColumn() == COLUMNTOCHECK[1] )

编辑。

对不起,我为我的英语使用不当和不明确的要求道歉。

我想要的是以下内容。

  1. 用户将在我的电子表格中输入数据
  2. 我想使用上面的脚本创建一个时间戳,该脚本只在更改多个单元格时输入时间戳

以为例

John将销售数据输入单元格A2,B2=创建的时间戳。

John将数据输入单元格A2=未创建时间戳。

希望这有道理?

  1. 使用事件对象获取范围
  2. COLUMNTOCHECK的数组中使用indexOf()来检查您正在观看的列之一是否已编辑
  3. 循环使用COLUMNTOCHECK并检查编辑行中每列的值。如果该行中的每一列都有一个值,则输入时间戳

根据您的需求,您可以简化步骤3并使其运行得更快。如果你只打算检查列A&B、 您可以简单地获取该范围一次(editedSheet.getRange(editedRow, 1, 1, 2).getValues()(,然后遍历返回的值数组。

还要注意的是,我删除了偏移量,并将时间戳放在了C列中。同样,我不确定您的要求,但您的实现会覆盖B列中的值,用于在A列中进行编辑。

function onEdit(e) {
var COLUMN_TO_CHECK = [1,2]; // The columns to check if something is entered. (Columns A & B)
var DATE_TIME_COLUMN = 3; // Where you want the date time stamp (Column C)
var SHEET_NAME = "Sheet1"; // Sheet you are working on
var editedCell = e.range;
var editedSheet = e.range.getSheet();
if (editedSheet.getName() === SHEET_NAME) {
if (COLUMN_TO_CHECK.indexOf(editedCell.getColumn()) != -1) {
var allFilled = true;
var editedRow = editedCell.getRow();
for (var i in COLUMN_TO_CHECK) {
if (editedSheet.getRange(editedRow, COLUMN_TO_CHECK[i]).getValue() == "") {
allFilled = false;
}
}
if (allFilled) {
editedSheet.getRange(editedRow,DATE_TIME_COLUMN).setValue(new Date());
}
}
}
}

最新更新