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

时间:2017-08-06 15:43:08

标签: google-apps-script google-sheets

我的目标

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

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

到目前为止我的进展

我已完成代码,但在运行时仍会收到错误消息。

错误消息是“无法将数组转换为对象[] []”以引用行php yii migrate/up --migrationPath=@vendor/dektrium/yii2-user/migrations

这是我的代码:

range.setValues(sheetNameArray);

2 个答案:

答案 0 :(得分:5)

错误消息提示错误:setValues方法需要"对象[] []"这是一个 double 数组。在Google表格中,所有数据范围都表示为双数组,例如[[1, 2], [3, 4]]。如果有一行,它仍然是一个双数组:[[1, 2]]。如果它是一列:[[1], [3]]

所以你需要这个额外的数组维度,基本上将每个工作表名称包装在方括号中。这在下面完成,我还使用map方法处理工作表数组:这比在push循环中使用for更清晰,更有效。

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);
}

答案 1 :(得分:1)

尝试下面的内容......

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()])
  }
}