电子表格跳转到当前日期问题
Spreadsheet jump to current date issue
亲爱的社区,您好,
不幸的是,我无法弄清楚@Serge insas AppScript 中跳转到我自己的电子表格中今天的单元格的问题在哪里。
修复了不同时区日期格式的潜在问题,但是,脚本跳转到最后一个单元格,如下所示:sh.getRange(5,sh.getLastColumn()).activate();
指示,而不是今天的单元格。
重要的是我的电子表格是水平构建的,here is the link
这是我的版本:
function JumpToToday() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getActiveSheet();
sh.getRange(5,sh.getLastColumn()).activate();
var data = sh.getDataRange("E5:NE5").getValues();
var offsetToSS = new Date('22/02/2022').setHours(0,0,0,0);
var today = parseInt((new Date().setHours(0,0,0,0)-offsetToSS)/86400000,10)+1;
for(var n=0;n<data[0].length;n++){
var date = data[0][n];
Logger.log("date = "+data[0][n]+" =? "+today);
if(date==today){break};
}
n++;
sh.getRange(1,n).activate();
}
问题可能是由于脚本先到最后一列然后从 n=0 开始计数吗?
嗯,我今天学到了一些新东西。 Date.valueOf() 和Date.setHours(0,0,0,0) return 一样,date 的值以毫秒为单位。但是你的日期无效。
新日期(“22/02/2022”)returns 无效日期。
function dummy() {
try {
var offsetToSS = new Date('02/22/2022').valueOf();
console.log(offsetToSS);
var offsetToSS = new Date('02/22/2022').setHours(0,0,0,0);
console.log(offsetToSS);
var today = parseInt((new Date().setHours(0,0,0,0)-offsetToSS)/86400000,10)+1;
console.log(today);
}
catch(err) {
console.log(err);
}
}
8:14:09 AM Notice Execution started
8:14:09 AM Info 1645506000000
8:14:09 AM Info 1645506000000
8:14:09 AM Info 1
8:14:09 AM Notice Execution completed
在 sheet 中获取当前日期。
- 你要数一数从1月1日到今天的天数
- 使用
Sheet.getRange(row, col, numRows, numCol)
的 col
参数中的天数 + 在 1 月 1 日单元格之前使用的列数。
我在这里创建了一个代码,它将在 user2501097 的回答 here:
的帮助下激活当前日期的单元格
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var snoopiSheet = ss.getSheetByName("Snoopi");
var range = snoopiSheet.getRange(5, getCurrentDayofYear() + 5, 1,1);
range.activate();
}
function getCurrentDayofYear(){
var date = new Date();
return (Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()) - Date.UTC(date.getFullYear(), 0, 0)) / 24 / 60 / 60 / 1000;
}
输出:
注意:我在上面的例子中使用了Snoopi sheet,我在getRange()
的第2个参数中添加了+5,因为计数的开始在第 5 列或 1 月 1 日。此外,当使用多个工作表时,请确保使用 ss.getSheetByName(name)
这是为了防止脚本将代码应用于不同的 sheets,如果您使用 getActiveSheet()
参考文献:
亲爱的社区,您好,
不幸的是,我无法弄清楚@Serge insas AppScript 中跳转到我自己的电子表格中今天的单元格的问题在哪里。
修复了不同时区日期格式的潜在问题,但是,脚本跳转到最后一个单元格,如下所示:sh.getRange(5,sh.getLastColumn()).activate();
指示,而不是今天的单元格。
重要的是我的电子表格是水平构建的,here is the link
这是我的版本:
function JumpToToday() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getActiveSheet();
sh.getRange(5,sh.getLastColumn()).activate();
var data = sh.getDataRange("E5:NE5").getValues();
var offsetToSS = new Date('22/02/2022').setHours(0,0,0,0);
var today = parseInt((new Date().setHours(0,0,0,0)-offsetToSS)/86400000,10)+1;
for(var n=0;n<data[0].length;n++){
var date = data[0][n];
Logger.log("date = "+data[0][n]+" =? "+today);
if(date==today){break};
}
n++;
sh.getRange(1,n).activate();
}
问题可能是由于脚本先到最后一列然后从 n=0 开始计数吗?
嗯,我今天学到了一些新东西。 Date.valueOf() 和Date.setHours(0,0,0,0) return 一样,date 的值以毫秒为单位。但是你的日期无效。
新日期(“22/02/2022”)returns 无效日期。
function dummy() {
try {
var offsetToSS = new Date('02/22/2022').valueOf();
console.log(offsetToSS);
var offsetToSS = new Date('02/22/2022').setHours(0,0,0,0);
console.log(offsetToSS);
var today = parseInt((new Date().setHours(0,0,0,0)-offsetToSS)/86400000,10)+1;
console.log(today);
}
catch(err) {
console.log(err);
}
}
8:14:09 AM Notice Execution started
8:14:09 AM Info 1645506000000
8:14:09 AM Info 1645506000000
8:14:09 AM Info 1
8:14:09 AM Notice Execution completed
在 sheet 中获取当前日期。
- 你要数一数从1月1日到今天的天数
- 使用
Sheet.getRange(row, col, numRows, numCol)
的col
参数中的天数 + 在 1 月 1 日单元格之前使用的列数。
我在这里创建了一个代码,它将在 user2501097 的回答 here:
的帮助下激活当前日期的单元格function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var snoopiSheet = ss.getSheetByName("Snoopi");
var range = snoopiSheet.getRange(5, getCurrentDayofYear() + 5, 1,1);
range.activate();
}
function getCurrentDayofYear(){
var date = new Date();
return (Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()) - Date.UTC(date.getFullYear(), 0, 0)) / 24 / 60 / 60 / 1000;
}
输出:
注意:我在上面的例子中使用了Snoopi sheet,我在getRange()
的第2个参数中添加了+5,因为计数的开始在第 5 列或 1 月 1 日。此外,当使用多个工作表时,请确保使用 ss.getSheetByName(name)
这是为了防止脚本将代码应用于不同的 sheets,如果您使用 getActiveSheet()