首页 > 解决方案 > 使用工作表名称时 getRangeByName 返回 null

问题描述

我正在尝试获取活动工作表的内容。为了实现这一点,我正在尝试使用 getRangeByName()。如果您记录 sheetName 的值,您将看到它确实返回了活动工作表的名称。但是当我使用 sheetName 作为 getRangeByName 的参数时,范围为空。

function TestMacro()
{
  var cellVal = SpreadsheetApp.getActiveSheet().getActiveCell().getValue();
  SpreadsheetApp.getUi().alert(FindIdenticalValue(cellVal));
}

function FindIdenticalValue(cellVal)
{
  var sheetName = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName();
  var range = SpreadsheetApp.getActive().getRangeByName(sheetName);
  var rowCount = range.getNumRows();
  var colCount = range.getNumColumns();
  return true;
}

标签: google-apps-scriptgoogle-sheets

解决方案


在这里查看命名范围是什么。它们与工作表的名称不同。电子表格中的层次结构如下:

  1. 电子表格文件的名称,例如预算
  2. 1. 以内的工作表名称,例如 2021 年预算
  3. 2. 内的范围名称,例如 line_items(例如 A2:A10)

要查看您是否实际上有任何命名范围,请使用

function logNamedRanges(){
  const namedRanges = SpreadsheetApp.getActive().getNamedRanges()
  if( !ranges.length ) {
    console.log("No ranges available")
    return 
  }
  namedRanges.forEach( namedRange => {
    console.log( namedRange.getName() )
    const range = namedRange.getRange()
  })
}

据我了解,您正在尝试获取活动工作表的内容,为此只需执行以下操作:

function getActiveSheetData(){
   return SpreadsheetApp.getActiveSheet().getDataRange().getValues()
}

推荐阅读