Google Apps脚本:在“今天”日期打开工作表

时间:2020-03-05 04:56:28

标签: google-apps-script google-sheets

我有一个按周划分的年度日历,每个星期之间都有一堆内容单元格。例如,本质上,B2:F2具有1月1日至1月5日,然后B15:F15具有1月9日至1月15日。

我正试图在包含“今天”日期的单元格上打开此工作表,但是以下脚本允许我在仅一列(D:D)中搜索“今天”。我无法在整个工作表上使用它。

到目前为止,我有:

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("D:D");
 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;
   }    
 }
  Logger.log(ssdate);
}

这似乎仅适用于D列,但是每次我尝试扩大此行中的范围时,它都无效:

  var range = sheet.getRange("Invoice!B2:F500");

有人知道我该怎么做吗?

注意:我没有编写此脚本,而是从this线程中获得的:)

谢谢!

编辑:

我们只休假5天(周一至周五)

这是工作表的样子: https://docs.google.com/spreadsheets/d/1JQxXy-ErVKATh5cUCD7u6QLQkaDyXfhhGuMKs_xgbh4/edit?usp=sharing

这是一张图片: spreadhseetexample

2 个答案:

答案 0 :(得分:0)

您使用的代码仅适用于单个列范围,而您想使用多个列范围。我建议您使用TestFinder类来实现解决方案。这是您的情况的示例:

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];

// Creates  a text finder.
var textFinder = sheet.createTextFinder(today);

// Returns the first occurrence cell of 'today' in the sheet.
var firstOccurrenceRange = textFinder.findNext();

// Sets the active range
sheet.setActiveRange(firstOccurrenceRange)

答案 1 :(得分:0)

跳转到某个日期

RemoveDuplicateRows()是今天的日期,因此,如果要在当前日历上进行测试,请使用我注释掉的行。参数是年,月,日 这里的月份是0-11,日期是1-31。全部在Date对象的JavaScript参考中。

请注意日期格式,因为它们必须完全匹配,并记住使用getDisplayValues()而不是getValues()进行比较。

您可能需要创建一个可安装的onOpen触发器,并且不要使用名称onOpen(),否则您将获得多个可能引起问题的触发器。我在旧版ES5(也称为Rhino)中测试了此代码

var dt

Javascript Date