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
我相信你的目标如下。
- 您有一个命名范围
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.
}
- 当此脚本为 运行 时,数据范围的值从命名范围中检索。
参考文献:
比如我有这样的数据
我给它取了个名字
我使用 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
我相信你的目标如下。
- 您有一个命名范围
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.
}
- 当此脚本为 运行 时,数据范围的值从命名范围中检索。