簡體   English   中英

hideColumns() 基於引用列索引的列數參數 Google Apps Script Google Sheets

[英]hideColumns() number of columns parameter based on referenced column index Google Apps Script Google Sheets

我正在嘗試在 Google 表格中執行hideColumns() 起始列始終是固定的(B 列),但要隱藏的列數是可變的,具體取決於日期函數。 標題行中的每個單元格都有一個日期,我想隱藏所有日期在今天日期之前的列。 因此,我進行了查找並找到了具有今天日期的列的索引號,我想簡單地引用該索引減去 1 以得出要隱藏的列數。

如果我對列數(例如 3)的值進行硬編碼,下面將起作用,但如果我引用i甚至嘗試將i重新定義為變量,則它將不起作用

function onOpen(e) {
  // Get column index of yesterday's date
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getSheetByName('Daily Tracker');
  var lastColumn = sheet.getLastColumn();
  var data = sheet.getRange(1,2,1,lastColumn).getDisplayValues().flat(); //create an array of data from row 1
    for (var i = 0; i <= data.length; i++) {
    var dateToday = Utilities.formatDate(new Date(), "EST", "MM/dd/yyyy")
    if (data[i] == dateToday)
    {  
      return i;
      break;
    }
    var hiddenColumnCount = i - 1;
    // Number of columns to hide = index - 1 (e.g. 10/14/2020 = index of 8. I need to hide columns 10/6/2020 through 10/13/2020, which = 7 columns so i - 1)
    // Hide all columns from column B through column with yesterday's date
    sheet.hideColumns(2,hiddenColumnCount);
  }
}

我不知道i是否無法被引用,因為它可能是一個字符串而不是一個數字,因為我從上面扁平化了數組。 但是我嘗試使用parseInt()轉換為數字,但不確定它是否有效或者是否正確。 我還嘗試在 for 語句上var hiddenColumnCount = 0然后我嘗試輸入hiddenColumnCount = i - 1而不是return i但這不起作用我是編程新手並嘗試自己查找所有內容但我遇到了障礙

我相信你的目標如下。

  • Each cell in the header row has a date, and I want to hide all columns with a date before today's date. I want to simply reference that index minus 1 to come up with the number of columns to hide. ,在您的情況下,當可以找到今天的日期時,您想隱藏帶有日期的列左側的列“B”。

修改要點:

  • 在您的情況下,似乎可以檢索今天日期的列號。 我認為這可以用於實現您的目標。
  • data數組循環時,請將for循環的條件從for (var i = 0; i <= data.length; i++) {for (var i = 0; i < data.length; i++) { . 當使用i <= data.length ,最后一個循環是數組外的索引。
  • 在您的腳本中,當找到今天的日期時,腳本就完成了。
  • 當使用hideColumns ,我認為在您的情況下,可以將其置於 for 循環之外。

當以上幾點反映到你的腳本中時,它變成如下。

修改后的腳本:

function onOpen(e) {
  // Get column index of yesterday's date
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getSheetByName('Daily Tracker');
  var lastColumn = sheet.getLastColumn();
  var data = sheet.getRange(1,2,1,lastColumn).getDisplayValues().flat(); //create an array of data from row 1
  
  // I modified below script.
  var columnNumber = 0;
  for (var i = 0; i < data.length; i++) {
    var dateToday = Utilities.formatDate(new Date(), "EST", "MM/dd/yyyy");
    if (data[i] == dateToday) {
      columnNumber = i + 2;
    }
  }
  sheet.hideColumns(2, columnNumber - 2);
  
  // Here, columnNumber is the column number of the found date.
}

筆記:

  • 在此修改中,它假設日期是從“B”列開始的升序。 請注意這一點。 當上面修改的腳本不是你期望的結果時,我認為可能需要確認Spreadsheet的情況。

參考:

嘗試這個:

function onOpen(e) {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Daily Tracker');    
  var data = sheet.getRange(1,2,1,sh.getLastColumn()).getDisplayValues().flat(); 
  for(var i = 0; i <= data.length; i++) {
    if (data[i]==Utilities.formatDate(new Date(), "EST", "MM/dd/yyyy")){break;}else{sh.hideColumn(i+2);}
  }
}

暫無
暫無

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

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