我正在尝试使用脚本编辑器将Google Sheet文档设置为第2行中的单元格,并使用当前日期。日期按时间顺序排列,每日排列自A2:IK2。它们的格式为mm / dd。
我在这个网站上找到了一个类似问题的答案,但是他们的日期列在一个列中,而我的日期在一行中。 Marshmallow在此发布了以下代码:https://webapps.stackexchange.com/questions/78927/how-to-make-google-sheet-jump-to-todays-row-when-opened)。
Marshmallow的回答:
function onOpen() {
var menu = [{name: "Jump to today's date", functionName: "jumpToDate"}];
SpreadsheetApp.getActiveSpreadsheet().addMenu("Custom", menu);
jumpToDate();
}
function jumpToDate() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var range = sheet.getRange("A:A");
var values = range.getValues();
var day = 24*3600*1000;
var today = parseInt((new Date().setHours(0,0,0,0))/day);
var ssdate;
for (var i=0; i<values.length; i++) {
try {
ssdate = values[i][0].getTime()/day;
}
catch(e) {
}
if (ssdate && Math.floor(ssdate) == today) {
sheet.setActiveRange(range.offset(i,0,1,1));
break;
}
}
}
我将其修改为:
function onOpen() {
var menu = [{name: "Jump to today's date", functionName: "jumpToDate"}];
SpreadsheetApp.getActiveSpreadsheet().addMenu("Custom", menu);
jumpToDate();
}
function jumpToDate() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var range = sheet.getRange("A2:IK2"); //given that it is in row 2
var values = range.getValues();
var day = 24*3600*1000;
var today = ((new Date().setHours(0,0,0,0))/day);
var ssdate;
for (var i=0; i<values.length; i++) {
try {
ssdate = values[i][0].getTime()/day;
}
catch(e) {
}
if (ssdate && Math.floor(ssdate) == today) {
sheet.setActiveRange(range.offset(0,i,1,1)); //to offset columns not rows
break;
}
}
}
我认为我考虑了从行到列的转置(范围“A:A”到“A2:IK2”并更改了指示的偏移量;但是,我没有看到代码有任何影响。更不用说了开到今天的日期。
我在这里缺少什么?有什么建议吗?
答案 0 :(得分:1)
转置需要更改的另外两个地方是:values[0][i]
而不是values[i][0]
,values[0].length
而不是values.length
。
为了解决RobG的评论,我还更改了比较逻辑,用直接的不等式替换了分区和地板:当前时间必须在电子表格中所述日期的开始和结束之间。
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var range = sheet.getRange("2:2"); // get all 2nd row
var values = range.getValues();
var day = 24*3600*1000;
var now = Date.now();
var ssdate;
for (var i = 0; i < values[0].length; i++) {
try {
ssdate = values[0][i].getTime();
}
catch(e) {
}
if (ssdate && ssdate <= now && now < ssdate + day) {
sheet.setActiveRange(range.offset(0,i,1,1));
break;
}
}
}