Google Sheets 脚本:将所有命名范围输出到单元格
Google Sheets Script: Output All Named Ranges to Cells
我想要附加到 Spreadsheet 的脚本中的一个函数来遍历所有命名范围,并将它们输入到“数据”sheet 的单元格中。这个 sheet 有很多列表等,我的主要 sheet(“分析”)使用这些列表。
理想情况下,这将使它们从第 1001 行开始,A 列是名称,D 列是范围。 (B 列和 C 列留空以允许 A 列溢出 - 不想调整 A 列的大小)
为了有效,应先删除函数先前输入的行中的任何现有数据,然后再使用新数据进行更新。
虽然我掌握了脚本语言的窍门,但我正在努力解决这个问题,所以如果有人可以提供示例函数,我们将不胜感激! MTIA.
[编辑]
如果我原来的问题不充分,我深表歉意。我有一些代码,但它是垃圾,我知道,所以我废弃了它。现在差不多了(我想),但还有一个问题需要排序,得到一个例外:
function namedRangeToSpreadsheet() {
// Author: Cooper
// Link:
// Purpose: Record all NamedRanges by both Name and Range, as a check that
// public copy is NOT missing any!
const ss=SpreadsheetApp.getActive();
const nrA=ss.getNamedRanges();
var startRow = 1001; // MH insert from this row
var endRow = 1200; // MH clear|insert to a max. of this
// var targetSh = "Data"; // MH revert to Data ss when tests OK
var targetSh = "Named Ranges";
// MH clear previous data
let sh=ss.getSheetByName(targetSh);
var range = sh.getRange(targetSh + "!A" + startRow + ":D" + endRow);
range.clear();
//sh.getRange(sh.getLastRow()+1,1,rowA.length,4).clear();
let rowA=[];
for(let i=0;i<nrA.length;i++) {
let name=nrA[i].getName();
let range=nrA[i].getRange().getA1Notation();
rowA.push([name,'','',range]);
}
rowA.sort(); // MH
/* Exception: The number of rows in the data does not match the number of rows in the range.
The data has 32 but the range has 200. (line 348, file "Code") */
//sh.getRange(sh.getLastRow()+1,1,rowA.length,4).setValues(rowA);
range.setValues(rowA);
}
function namedRangeToSpreadsheet() {
const ss=SpreadsheetApp.getActive();
const nrA=ss.getNamedRanges();
let rowA=[];
for(let i=0;i<nrA.length;i++) {
let name=nrA[i].getName();
let range=nrA[i].getRange().getA1Notation();
rowA.push([name,'','',range]);
}
let sh=ss.getSheetByName('Sheet1');
sh.getRange(sh.getLastRow()+1,1,rowA.length,4).setValues(rowA);
}
我想要附加到 Spreadsheet 的脚本中的一个函数来遍历所有命名范围,并将它们输入到“数据”sheet 的单元格中。这个 sheet 有很多列表等,我的主要 sheet(“分析”)使用这些列表。
理想情况下,这将使它们从第 1001 行开始,A 列是名称,D 列是范围。 (B 列和 C 列留空以允许 A 列溢出 - 不想调整 A 列的大小)
为了有效,应先删除函数先前输入的行中的任何现有数据,然后再使用新数据进行更新。
虽然我掌握了脚本语言的窍门,但我正在努力解决这个问题,所以如果有人可以提供示例函数,我们将不胜感激! MTIA.
[编辑] 如果我原来的问题不充分,我深表歉意。我有一些代码,但它是垃圾,我知道,所以我废弃了它。现在差不多了(我想),但还有一个问题需要排序,得到一个例外:
function namedRangeToSpreadsheet() {
// Author: Cooper
// Link:
// Purpose: Record all NamedRanges by both Name and Range, as a check that
// public copy is NOT missing any!
const ss=SpreadsheetApp.getActive();
const nrA=ss.getNamedRanges();
var startRow = 1001; // MH insert from this row
var endRow = 1200; // MH clear|insert to a max. of this
// var targetSh = "Data"; // MH revert to Data ss when tests OK
var targetSh = "Named Ranges";
// MH clear previous data
let sh=ss.getSheetByName(targetSh);
var range = sh.getRange(targetSh + "!A" + startRow + ":D" + endRow);
range.clear();
//sh.getRange(sh.getLastRow()+1,1,rowA.length,4).clear();
let rowA=[];
for(let i=0;i<nrA.length;i++) {
let name=nrA[i].getName();
let range=nrA[i].getRange().getA1Notation();
rowA.push([name,'','',range]);
}
rowA.sort(); // MH
/* Exception: The number of rows in the data does not match the number of rows in the range.
The data has 32 but the range has 200. (line 348, file "Code") */
//sh.getRange(sh.getLastRow()+1,1,rowA.length,4).setValues(rowA);
range.setValues(rowA);
}
function namedRangeToSpreadsheet() {
const ss=SpreadsheetApp.getActive();
const nrA=ss.getNamedRanges();
let rowA=[];
for(let i=0;i<nrA.length;i++) {
let name=nrA[i].getName();
let range=nrA[i].getRange().getA1Notation();
rowA.push([name,'','',range]);
}
let sh=ss.getSheetByName('Sheet1');
sh.getRange(sh.getLastRow()+1,1,rowA.length,4).setValues(rowA);
}