我有一个Google表格电子表格。第2行包含日期,例如25/08 / 2020、26 / 08/2020涉及许多专栏。第一次打开文档时,是否可以运行脚本以使其跳转到包含当前日期的单元格?
我知道您定义了OnOpen()方法,该方法在打开文档时运行,但是事实证明,要获取实际起作用的代码很困难。
注意:我看过Google spreadsheet / docs , jump to current date cell on Open,但是解决方案不起作用(我假设由于我的日期全部放在一行中)。
我不太了解javascript,我了解一些基本知识。任何帮助将不胜感激。
谢谢
答案 0 :(得分:1)
您在 Google spreadsheet / docs , jump to current date cell on Open找到的代码对您不起作用,因为它仅检查第一列。
我稍微修改了这段代码以连续搜索日期。
根据需要更改rowWithDates变量。
function onOpen() { // runs automatically
var rowWithDates = 2; // change as needed
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getActiveSheet();
var range = sh.getDataRange()
var data = range.getValues();
var today = new Date().setHours(0,0,0,0);
var diffref = today;
var diff;
var idx;
for(var n=0;n<range.getWidth();n++){
var date = new Date(data[rowWithDates-1][n]).setHours(0,0,0,0);
diff=today-date;
if(diff==0){break}
Logger.log("diffref = "+diffref+" today-date = diff = "+diff);
if(diff < diffref && diff > 0){idx=n ; diffref=diff}
}
if(n==data.length){n=idx}
n++;
sh.getRange(rowWithDates, n).activate();
}
答案 1 :(得分:1)
您可以使用在问题中引用的答案中提供的代码,只需更改以下几点即可:
function onOpen() {
var row = 8; //set this to be the row with the dates
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getActiveSheet();
var data = sh.getDataRange();
var datesrow = sh.getRange(row,data.getColumn(),row,data.getWidth()).getValues();
var today = new Date().setHours(0,0,0,0);
for(var n=0;n<datesrow[0].length;n++){
var date = new Date(datesrow[0][n]).setHours(0,0,0,0);
if(date==today){break};
}
console.log(n);
n++;
sh.getRange(row,n).activate();
}
答案 2 :(得分:0)
虽然其他解决方案可能暂时可以使用,但建议您在使用日期时考虑使用显示值。强烈建议您删除旧的for循环和var声明。
这将是一个更可靠的解决方案:
function onOpen() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sh =ss.getActiveSheet();
const today = new Date();
const today_year= today.getFullYear();
const today_month = addZero(today.getMonth()+1);
const today_day = addZero(today.getDate());
const today_date = today_day.toString() + "/" + today_month.toString() + "/" + today_year.toString();
function addZero(i) {
if (i < 10) {
i = "0" + i;
}
return i;
}
const dates = sh.getRange(2,1,1,sh.getLastColumn()).getDisplayValues().flat(1);
dates.forEach((d,index)=>{
if (d===today_date){
sh.getRange(2,index+1).activate();}});
}