在电子表格中列出所有名称并跳过前几个
List all the names in a spreadsheet and skip the first few
我正在使用以下代码列出特定 sheet 中 sheet 的所有名称。
function listSheetNames() {
var names = SpreadsheetApp.getActive().getSheets()
.map(function(s) {
return [s.getName()];
})
//Sheet index where list needs to go
SpreadsheetApp.getActive().getSheets()[1]
.getRange(1, 1, names.length, names[0].length).setValues(names)
}
但是我希望能够跳过前几个名字,这样它们就不会被列出。如何才能做到这一点。
还有另一个 显示了这一点,但其中的代码不会自动更新,或者有没有办法将两者结合起来,而不使用下面的单元格公式。
有没有办法在 sheet 列出时插入 link。
function SheetNames() { // Usage as custom function: =SheetNames( GoogleClock() )
try {
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets()
var out = new Array( sheets.length+1 ) ;
//out[0] = [ "Name" , "gid" ];
for (var i = 3 ; i < sheets.length+1 ; i++ ) out[i-2] = [sheets[i-1].getName()];
return out
}
catch( err ) {
return "#ERROR!"
}
}
更新
所以我设法将两者组合如下
function listSheetNames() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheets();
var sheets = SpreadsheetApp.getActive().getSheets()
.map(function(s) {
return [s.getName()];
})
var out = new Array( ss.length+1 ) ;
//out[0] = [ "Name" , "gid" ];
for (var i = 3 ; i < ss.length+1 ; i++ ) out[i-2] = [ss[i-1].getName()];
SpreadsheetApp.getActive().getSheets()[1]
.getRange(1, 1, sheets.length, sheets[0].length).setValues([out])
}
现在我得到一个错误,如果我做 .setValues([out])
incorrect range height, was 1 but should be 22 (line 46)
如果我离开就像.setValues(out)
然后我得到错误
Cannot convert Array to Object[][]. (line 46)
这应该可以解决问题。我在另一列中向 sheet 添加了 link。
它将输出放在名为 'Output tab'.
的选项卡中
function listSheetNames() {
var sheets = SpreadsheetApp.getActive().getSheets()
.map(function(s) {
return s.getName();
})
var array = []
for (var i = 3; i < sheets.length; i++) {
array.push([sheets[i], '=hyperlink("'+SpreadsheetApp.getActive().getUrl()+'#gid='+SpreadsheetApp.getActive().getSheetByName(sheets[i]).getSheetId()+'"; "Linkname")']);
}
SpreadsheetApp.getActive().getSheetByName('Output tab').getRange(1,1,array.length,array[0].length).setValues(array)
}
我相信应该可以在第一个循环(地图)中完成所有事情
function listSheetNames() {
var ss = SpreadsheetApp.getActive();
var array = ss.getSheets()
.map(function (s) {
return [s.getName(), '=hyperlink("' + ss.getUrl() + '#gid=' + ss.getSheetByName(s.getName())
.getSheetId() + '"; "Linkname")'];
}).slice(2) //first two elements removed
ss.getSheetByName('Output tab')
.getRange(1, 1, array.length, array[0].length)
.setValues(array)
}
我正在使用以下代码列出特定 sheet 中 sheet 的所有名称。
function listSheetNames() {
var names = SpreadsheetApp.getActive().getSheets()
.map(function(s) {
return [s.getName()];
})
//Sheet index where list needs to go
SpreadsheetApp.getActive().getSheets()[1]
.getRange(1, 1, names.length, names[0].length).setValues(names)
}
但是我希望能够跳过前几个名字,这样它们就不会被列出。如何才能做到这一点。
还有另一个
有没有办法在 sheet 列出时插入 link。
function SheetNames() { // Usage as custom function: =SheetNames( GoogleClock() )
try {
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets()
var out = new Array( sheets.length+1 ) ;
//out[0] = [ "Name" , "gid" ];
for (var i = 3 ; i < sheets.length+1 ; i++ ) out[i-2] = [sheets[i-1].getName()];
return out
}
catch( err ) {
return "#ERROR!"
}
}
更新
所以我设法将两者组合如下
function listSheetNames() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheets();
var sheets = SpreadsheetApp.getActive().getSheets()
.map(function(s) {
return [s.getName()];
})
var out = new Array( ss.length+1 ) ;
//out[0] = [ "Name" , "gid" ];
for (var i = 3 ; i < ss.length+1 ; i++ ) out[i-2] = [ss[i-1].getName()];
SpreadsheetApp.getActive().getSheets()[1]
.getRange(1, 1, sheets.length, sheets[0].length).setValues([out])
}
现在我得到一个错误,如果我做 .setValues([out])
incorrect range height, was 1 but should be 22 (line 46)
如果我离开就像.setValues(out)
然后我得到错误
Cannot convert Array to Object[][]. (line 46)
这应该可以解决问题。我在另一列中向 sheet 添加了 link。 它将输出放在名为 'Output tab'.
的选项卡中function listSheetNames() {
var sheets = SpreadsheetApp.getActive().getSheets()
.map(function(s) {
return s.getName();
})
var array = []
for (var i = 3; i < sheets.length; i++) {
array.push([sheets[i], '=hyperlink("'+SpreadsheetApp.getActive().getUrl()+'#gid='+SpreadsheetApp.getActive().getSheetByName(sheets[i]).getSheetId()+'"; "Linkname")']);
}
SpreadsheetApp.getActive().getSheetByName('Output tab').getRange(1,1,array.length,array[0].length).setValues(array)
}
我相信应该可以在第一个循环(地图)中完成所有事情
function listSheetNames() {
var ss = SpreadsheetApp.getActive();
var array = ss.getSheets()
.map(function (s) {
return [s.getName(), '=hyperlink("' + ss.getUrl() + '#gid=' + ss.getSheetByName(s.getName())
.getSheetId() + '"; "Linkname")'];
}).slice(2) //first two elements removed
ss.getSheetByName('Output tab')
.getRange(1, 1, array.length, array[0].length)
.setValues(array)
}