簡體   English   中英

跳轉到當前日期單元格(日期在一行中)Google 表格

[英]Jump to current date cell (dates are in one row) Google Sheets

我有一個谷歌表格電子表格。 第 2 行包含跨越許多列的日期,例如 25/08/2020、26/08/2020。 有沒有我可以運行的腳本讓它跳轉到包含文檔首次打開時的當前日期的單元格?

我知道有您定義的 OnOpen() 方法,它在打開文檔時運行,但是,它正在獲取實際工作的代碼,這被證明是困難的。

注意:我查看了Google 電子表格/文檔,跳轉到 Open 上的當前日期單元格,但解決方案不起作用(我假設是因為我的日期都在一行中)。

我不太了解 javascript,我了解一些基礎知識。 任何幫助將非常感激。

謝謝

您在Google 電子表格/文檔中找到的代碼,跳轉到打開時的當前日期單元格對您不起作用,因為它只檢查第一列。
我稍微修改了這段代碼以搜索連續的日期。
根據需要更改 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. 讓它看起來在一行中,而不是一列中(請注意,數據數組正在更改第二個數組維度,而不是第一個);
  2. 讓它看起來在特定的行中,而不是僅僅硬編碼到第一行(你可以讓數組使用變量“行”而不是 0;相反,我只是讓代碼只為帶有日期的行提取數據- 這對於非常大的電子表格來說更快)。
    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();
    }

解決方案:

雖然其他解決方案目前可能有效,但建議在使用日期時考慮顯示值 還強烈建議擺脫舊的 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();}});
 
}

參考:

getDisplayValues()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM