簡體   English   中英

谷歌表格腳本:從當前單元格獲取多列/行命名范圍

[英]Google Sheets Script: Get Multi-Col/Row Named Range from Current Cell

從其他示例中,我有一個 function 返回當前單元格的命名范圍的名稱 - 但前提是該范圍由單個單元格組成。

我開始嘗試解析范圍的開始和結束 Col 和 Row,但是一旦 cols 出現多個字符,例如“AA”,就會遇到問題。

然后我想如果我能得到單元格的“R1C1”符號,我可以使用 getCell() 來測試它是否存在於范圍內。 但是,我找不到 getA1Notation() 的等效 function 來獲取當前單元格的 R1C1。 請問它是如何獲得的?

function c_GetCellNamedRange() {
  const ui = SpreadsheetApp.getUi();
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const cell = sheet.getCurrentCell().getA1Notation();
  ui.alert("Current Cell: " + cell);

  //get all the name ranges of the spreadsheetsheet
  var namedRanges = SpreadsheetApp.getActiveSpreadsheet().getNamedRanges();
  // loop through all the names range of the sheet
  for(i=0;i<namedRanges.length;i++){
  
/*  
    // this only works if range is a single cell! How to loop through?
    if(namedRanges[i].getRange().getA1Notation() == A1Notation) {
      rangeName = namedRanges[i].getName();
      break;
    }
*/
    // get the current cell R1C1 notation, then use getCell() to test if
    // it exists in the named range?
    //var rv = namedRanges[i].getCell(cell.getRow(), cell.getColumn())
    var rv = namedRanges[i].getCell(cell.getRowIndex(), cell.getColumn())
    if (!rv ) {
      rangeName = namedRanges[i].getName();
      break;
    }

  }

  if ( !rangeName ) rangeName = "none"
  ui.alert("Current Cell:   " + cell + " \r\n\r\n Named Range:   " + rangeName);
}

您可以使用getRow()getColumn()獲取單元格的行索引和列索引。 然后你可以用它來寫它的 R1C1 符號:

const r1c1Notation = `R${sheet.getCurrentCell().getRowIndex()}C${sheet.getCurrentCell().getColumn()}`;

如果我理解正確,您想遍歷命名范圍的每個單元格,以將單元格的 A1 表示法與變量進行比較

  • 為此,您可以在嵌套循環中使用方法range.getCell() - 因為范圍是二維 object。
  • 確定范圍的高度和寬度的方法之一是使用方法getRow()getLastRow()getColumn()getLastColumn()

樣本:

function myFunction() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var namedRanges = SpreadsheetApp.getActiveSpreadsheet().getNamedRanges();
  var A1Notation = "B5";
  for(var i = 0;i < namedRanges.length; i++){
    Logger.log(namedRanges[i].getRange().getA1Notation());
    var range = namedRanges[i].getRange();    
    var rangeWidth = range.getWidth();
    var rangeHeight = range.getHeight();
    for (var j = 1; j <= rangeWidth; j++){ 
      for (var k = 1; k <= rangeHeight; k++){ 
        var A1 = range.getCell(j, k).getA1Notation();
        if (A1 == A1Notation){
          rangeName = namedRanges[i].getName();
          break;
        }      
      }
    }
  }
}

暫無
暫無

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

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