Google 应用脚本:如何只从命名范围获取数据范围?

Google App Script: How do I get only data range from named range?

比如我有这样的数据

我给它取了个名字

我使用 Spreadsheet.getRangeByName 得到了 A 列中的每个单元格,包括空白行

如何只获取有数据的范围(如 Sheet.getDataRange

输出应该是[[data], [data], [data], [data]]

或者[[data,,,...and so on], [data,,,...], [data,,,...], [data,,,...]]也可以

获取命名范围

function nr() {
  const ss = SpreadsheetApp.getActive();
  const nrs = ss.getNamedRanges();
  Logger.log(nrs.map(r => [r.getName(),r.getRange().getA1Notation()]))
}


Execution log
12:02:07 PM Notice  Execution started
12:02:06 PM Info    [[Sheet1, D4:G9], [one, C6:C8], [NamedRange1, C9:H11]]
12:02:08 PM Notice  Execution completed

Spreadsheet.getNamedRanges

我相信你的目标如下。

  • 您有一个命名范围 test!A:A 作为 Data 的名称。
  • 您想从命名范围中检索值并从命名范围中检索数据范围。
  • 您想使用 Google Apps 脚本实现此目的。

在这种情况下,下面的示例脚本怎么样?

示例脚本:

function myFunction() {
  const nameOfNamedRange = "Data"; // Please set the name of named range.

  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const values = ss.getRangeByName(nameOfNamedRange).getValues();
  const row = values.length - [...values].reverse().findIndex(r => r.findIndex(c => c.toString() != "") > -1);
  const colLen = values[0].length;
  const col = Math.min(...values.map(r => colLen - r.findIndex(c => [...c].reverse().toString() != "")));
  const res = values.splice(0, row).map(r => r.splice(0, col));

  console.log(res); // You can see the result values in the log.
}
  • 当此脚本为 运行 时,数据范围的值从命名范围中检索。

参考文献: