所以我在论坛周围到处都是,我不敢相信没有人问过这个,而且我敢肯定,你们中有些人可能也想知道这一点。
因此,肯定存在有关自动日期填充的问题,但是,我发现几乎100%的脚本都无法满足我的需求,所以这里就是问题。
问题:当填充另一个单元格时,如何将一个单元格自动填充到当前日期?但... 总是遗漏一件事...如果在同一列中有多个单元格被填充,如何获得填充相同行数的日期?
我遇到的问题是,当我在工作中尝试创建一些电子表格时,就是这个日期问题。我希望能够获取一批数据,填充一个单元格或我要指定脚本的任何单元格,而没有A列,所以只能填充一个日期以获取一批数据。我必须将很多信息粘贴到工作表中,并且我不想手动填充到当前日期的A列中的每个单元格。
这是我的脚本,请告诉我该怎么做才能对其进行修改。 我正在将此脚本工作的列是日期的列A,然后填充列E。
样本图像:
var COLUMNTOCHECK = 5;
var DATETIMELOCATION = [0,-4];
var SHEETNAME = 'Appraisers'
function onEdit(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
if( sheet.getSheetName() == SHEETNAME ) {
var selectedCell = ss.getActiveCell();
if( selectedCell.getColumn() == COLUMNTOCHECK) {
var dateTimeCell = selectedCell.offset(DATETIMELOCATION[0],DATETIMELOCATION[1]);
dateTimeCell.setValue(new Date());
}
}
}
答案 0 :(得分:0)
您的代码本身没有问题。它工作正常。但是正如@TheMaster所说,您应该在OnEdit触发器中读取e
变量,因为它返回了多个"event objects",这些在Trigger documentation中有详细描述。
这很值得,因为您会知道OnEdit
在您编辑数据时有效,而不是在复制/粘贴时有效。但是有一种解决方法。
e.range
对象将告诉您复制/粘贴发生的范围。您可以通过运行一个简单的logger命令对其进行测试:
Logger.log("e range = "+e.range.getA1Notation());
通过使用该范围,我们可以计算该范围的起始行和行数,因此循环可以创建偏移值。
尝试此代码。
在Google script onEdit in all pasted cells中应归功于Cooper
function so_53471920(e) {
// set up the spreadsheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
// set up some key variables
var COLUMNTOCHECK = 5;
var DATETIMELOCATION = [0, -4];
var SHEETNAME = "Appraisers";
var adjustdate = new(Date);
// return the edited range from OnEdit
var myrange = e.range;
// get the starting row, starting column, range depth in the range and name of the active sheet
var startRow = e.range.getRow();
var startColumn = e.range.getColumn();
var rowdepth = e.range.getNumRows();
var activeSheet = e.source.getActiveSheet().getName();
// Logger.log("1=e.range = "+e.range.getA1Notation());// DEBUG
// Logger.log("2=starting column in e.range = "+startColumn);// DEBUG
// Logger.log("3=starting row in e.range = "+startRow);// DEBUG
// Logger.log("4=Number of rows in e.range = "+rowdepth);// DEBUG
// Logger.log("5=The sheet name is "+activeSheet);
// test the sheet and column
// Note: getColumn returns the starting column position for this range; so this works only if the left hand paste column is "E"
if (activeSheet !== SHEETNAME || startColumn !== COLUMNTOCHECK) {
// quit if this isn't the right sheet or column
Logger.log("system quit");
return;
} else {
// loop through the number of rows in the pasted range
// getNumRows returns the number of rows in this range.
//Logger.log("start row="+startRow+", target i = "+(startRow+rowdepth)); //DEBUG
for (var i = startRow; i < (startRow + rowdepth); i++) {
// i = the row number
// Logger.log("Updated row A"+i);//DFEBUG
e.source.getActiveSheet().getRange("A" + i).setValue(adjustdate);
}
}
}