我正尝试在工作表中使用此代码,但是出现问题。我在一张纸上有12个标签。每个表代表一个新月。我希望它在相应的标签中自动跳转到当前日期。
我的约会从H1开始,一直到AL1。
我尝试调整脚本以反映该情况,但收效甚微
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var range = sheet.getRange("H1:AL1"); // 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;
}
}
}
答案 0 :(得分:0)
对于此解决方案,我假设您已订购了从1月到12月的所有月份,因此1月处于第一位置。
每次打开电子表格时,您都可以设置一个新的日期,获取月份和日期,并在表格和范围中使用active
:
function onOpen(){
let date = new Date();
let month = Utilities.formatDate(date, 'UTC', 'M');
let day = Utilities.formatDate(date, 'UTC', 'd');
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
sheets[month - 1].activate();
var range = sheets[month - 1].getRange(1, 7 + parseInt(day));
sheets[month - 1].setActiveRange(range);
}
您会注意到7 + parseInt(day)
。由于H从第8个位置开始,我们加上当月的天,但要减去1。否则,该月的第一天将是8 +1(H +1),并且将重点放在I上。此外,{{ 1}}是将parseInt
转换为整数以避免day
。
参考: