Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 在电子表格中列出所有名称,并跳过前几个_Google Apps Script_Google Sheets_Google Spreadsheet Api - Fatal编程技术网

Google apps script 在电子表格中列出所有名称,并跳过前几个

Google apps script 在电子表格中列出所有名称,并跳过前几个,google-apps-script,google-sheets,google-spreadsheet-api,Google Apps Script,Google Sheets,Google Spreadsheet Api,我使用下面的代码列出特定工作表中所有工作表的名称 function listSheetNames() { var names = SpreadsheetApp.getActive().getSheets() .map(function(s) { return [s.getName()]; }) //Sheet index where list needs to go SpreadsheetApp.getActiv

我使用下面的代码列出特定工作表中所有工作表的名称

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)
}
然而,我希望能够跳过前几个名字,这样他们就不会被列入名单。如何做到这一点

还有一个例子显示了这一点,但其中的代码不会自动更新,或者有一种方法可以将两者结合起来,而不使用下面的公式中的单元格内公式

有没有一种方法可以在工作表列出时插入到该工作表的链接

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],就会得到一个错误

量程高度不正确,为1,但应为22第46行

如果我离开的话,我会告诉你

然后我得到了错误

无法将数组转换为对象[]。第46行


这应该能奏效。我在另一列中添加了一个到工作表的链接。 它将输出放在一个名为“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)
}

检查您的范围选择。我认为您需要使用.getRange1,1,out.length,out[0].length,因为您需要选择一个与out数组一样大的范围。尝试获取错误TypeError:无法从undefined读取属性长度。第46Oh行抱歉,这是假设[0]将分配一个值,但事实并非如此。请改为尝试以下操作:.getRange1,1,out.length,out[1]。自out[1]起的长度应包含一个值。您也可以使用它,因为您的数组始终有1列:.getRange1,1,out.length,1Tried二者,获取错误范围高度不正确,为1,但应为23行46。无论如何,要链接列出的项而不是带有linkname的单独列,请为var i=2计算出它;i.长度;i++{array.push['=hyperlink'+SpreadsheetApp.getActive.getUrl+'gid='+SpreadsheetApp.getActive.getSheetByNamesheets[i].getSheetId+';'+sheets[i]+'];这真是太棒了,谢谢!