在Google Apps脚本中创建所有工作表名称的列表

Ada*_*dam 2 google-sheets google-apps-script

我的目标

我有两个电子表格SpreadSheetA和SpreadSheetB。

我试图获取SpreadSheetA中所有工作表的名称列表,并将其添加到SpreadSheetB中的活动工作表中。

到目前为止我的进度

我已经完成了代码,但是在运行它时不断收到错误消息。

相对于line,错误消息为“无法将Array转换为Object [] []” range.setValues(sheetNameArray);

这是我的代码:

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);
}
Run Code Online (Sandbox Code Playgroud)

小智 5

错误消息提示出了什么问题:该setValues方法期望的是“ Object [] []”,它是事物的双重数组。在Google表格中,所有数据范围均表示为双精度数组,例如[[1, 2], [3, 4]]。如果有一行,它仍然是一个双精度数组:[[1, 2]]。如果是一栏:[[1], [3]]

因此,您需要这个额外的数组维度,实际上是将每个工作表名称都包装在方括号中。这是在下面完成的,在这里我还使用了map方法来处理工作表数组:这比pushfor循环中使用更干净,而且可能更有效。

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);
}
Run Code Online (Sandbox Code Playgroud)