我正在尝试使用脚本编辑器将 Google 表格文档设置为打开第 2 行中包含当前日期的单元格。日期按时间顺序排列,每天从 A2:IK2 开始。它们的格式为 mm/dd。
我在该网站上找到了一个类似问题的答案,但是他们的日期列在一列中,而我的日期列在一行中。 Marshmallow 在这里发布了以下代码:https://webapps.stackexchange.com/questions/78927/how-to-make-google-sheet-jump-to-todays-row-when-opened ).
棉花糖的回答:
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”并更改指示的偏移量;但是,我没有看到代码有任何影响。更不用说打开到今天的日期。
我在这里错过了什么?有什么建议吗?
最佳答案
换位需要更改的另外两个地方是: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;
}
}
}
关于javascript - 如何将 Google 表格电子表格打开到包含今天日期的单行中的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36583526/