【问题标题】:Create list of all sheet names in Google Apps Scripts在 Google Apps 脚本中创建所有工作表名称的列表
【发布时间】:2017-08-06 15:43:08
【问题描述】:

我的目标

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

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

到目前为止我的进步

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

错误消息是“无法将数组转换为对象[][]”,引用行 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);
}

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢米歇尔!只需对您上面的回复进行快速编辑 - 您添加的新行在 map 方法的末尾缺少 );
    【解决方案2】:

    试试下面...

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

    【讨论】:

    • 感谢您解释得如此清楚。此外,这会将行附加到当前工作表中数据的底部,而 OP 希望将名称放在工作表的顶部。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多