Create list of all sheet names in Google Apps Scripts

寵の児 提交于 2020-08-19 17:04:16

问题


My goal

I have two spreadsheets, SpreadSheetA and SpreadSheetB.

I am trying to get a list of the names of all the sheets in SpreadSheetA and add it to the active sheet in SpreadSheetB.

My progress so far

I have the code done but keep getting an error message when I run it.

The error message is "Cannot convert Array to Object[][]" in reference to the line range.setValues(sheetNameArray);.

Here is my code:

function getSheetNamesAndAddToOtherSheet() {
  var spreadSheetAURL = "https://docs.google.com/spreadsheets/d/UNIQUE-ID-HERE/edit"; 
  var sheetNameArray = [];

  var spreadSheetsInA = SpreadsheetApp.openByUrl(spreadSheetAURL).getSheets();

  for (var i = 0; i < spreadSheetsInA.length; i++) {
    sheetNameArray.push(spreadSheetsInA[i].getName());
  }

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = sheet.getRange(1, 1, sheetNameArray.length, 1);
  range.setValues(sheetNameArray);
}

回答1:


The error message hints at what's wrong: the setValues method expects "Object[][]" that is a double array of things. In Google Sheets, all ranges of data are represented as double arrays, such as [[1, 2], [3, 4]]. If there is one row, it's still a double array: [[1, 2]]. If it's one column: [[1], [3]].

So you need this extra array dimension, essentially wrapping every sheet name in square brackets. This is done below, where I also used map method to process the array of sheets: this is cleaner and likely more efficient than using push in a for loop.

function getSheetNamesAndAddToOtherSheet() {
  var spreadSheetAURL = "https://docs.google.com/spreadsheets/d/UNIQUE-ID-HERE/edit"; 
  var sheetNameArray = [];

  var spreadSheetsInA = SpreadsheetApp.openByUrl(spreadSheetAURL).getSheets();

  sheetNameArray = spreadSheetsInA.map(function(sheet) {
    return [sheet.getName()];
  });

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = sheet.getRange(1, 1, sheetNameArray.length, 1);
  range.setValues(sheetNameArray);
}



回答2:


Try the below...

function getSheetNamesAndAddToOtherSheet() {
  var spreadSheetAURL = "https://docs.google.com/spreadsheets/d/UNIQUE-ID-HERE/edit"; 
  var spreadSheetsInA = SpreadsheetApp.openByUrl(spreadSheetAURL).getSheets();
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  for (var i = 0; i < spreadSheetsInA.length; i++) {
    sheet.appendRow([spreadSheetsInA[i].getName()])
  }
}


来源:https://stackoverflow.com/questions/45533701/create-list-of-all-sheet-names-in-google-apps-scripts

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!