跳至Google表格中包含今天日期的单元格

时间:2020-04-10 08:17:56

标签: google-apps-script google-sheets

我正在尝试在Google表格中创建一个函数,该函数将跳到包含当前日期的单元格。

如果日期在一列中并且格式设置为mm / dd / yyyy,则以下功能有效。

function gotoToday() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getActiveSheet();
 var range = sheet.getRange("G:G");
 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;
   } } 
}

但是,在我的工作表中包含日期的单元格填充为“ = A1 + 1”等,并按如下方式分布在各列中:

enter image description here

如何修改上面的功能,以便它可以找到并匹配今天的日期?

谢谢

更新:我设法使该函数跨多个列工作。现在我只需要知道如何读取单元格中填充为= A1 + 1,A2 + 1等的日期

1 个答案:

答案 0 :(得分:1)

两件事:

    • 您的范围定义为var range = sheet.getRange("G:G");
    • 这意味着您的函数仅在G列中查找今天的日期。
    • 如果要将其功能扩展到所有列,则需要定义范围,例如为var range = sheet.getDataRange();
    • 因此,仅遍历行(ssdate = values[i][0].getTime()/day;)是不够的,但是您需要两个嵌套的for遍历行和列:ssdate = values[i][j].getTime()/day; < / li>
    • 您的电子表格具有某些用于设置日期格式的设置-取决于您的语言环境。
    • 如果将日期格式粘贴到电子表格中的日期与电子表格所期望的格式不同,则它将无法识别为日期对象,因此无法应用方法getTime()
    • 如果您要指定单元格内容为日期-您必须在电子表格中选择此单元格,然后转到Format ->Number -> Date

参考: