一维数组填充电子表格列

时间:2018-10-31 19:11:28

标签: google-apps-script google-sheets

我正在使用内置的网上论坛服务来提取用户名列表...

function getUsersInGroup(group) {
  var usersInGroup = GroupsApp.getGroupByEmail(group).getUsers();
  return usersInGroup;
}

...它返回一个数组,像这样...

[ person1@email.com, person2@email.com, person3@email.com ]

我希望这些电子邮件显示在这样的电子表格列中... Email addresses in column A of a spreadsheet. Each value is in a separate row.

即使数据“平坦”,Apps Script的.setValues()似乎也需要2D数组,因此我从测试中得出的印象是我的数据必须采用这种格式...

var data = [[person1@email.com],[person2@email.com],[person3@email.com]]

如果我希望它显示为数据行而不是列中的一项。

如果我是正确的话,我想我正在寻找问题中两个(也许三个)中最好的一个。

我认为可能的解决方案

  1. 变换数组并使数组中的每个项目成为一个项目数组 可能是for循环

  2. 发现有一个更好的内置函数可以将 数组并将其转换为一行数据

  3. 我还有其他可以做的事,甚至我在这里都没有考虑

2 个答案:

答案 0 :(得分:3)

如果您不想循环浏览,也可以使用sheets API。

使用Advanced Google services并将majorDimension切换为列:

  var data = [ 'person1@email.com', 'person2@email.com', 'person3@email.com' ];
  var request = {
    range: 'Sheet1!A1',
    majorDimension: 'COLUMNS',
    values: [data], //still 2D
  };
  //API must be enabled before use. 
  //https://developers.google.com/apps-script/advanced/sheets
  Sheets.Spreadsheets.Values.update(request, ss.getId(), request.range, {
    valueInputOption: 'USER_ENTERED',
  });

或循环遍历:

data = data.map(function(e){return [e];});

答案 1 :(得分:0)

正如@TheMaster所指出的,使用map函数的简单循环效果很好。这是我所做的:

function writeArrayToColumn(array) {
  var mainSheet = SpreadsheetApp.getActiveSheet(); 

  var newArray = array.map(function (el) {
    return [el];
  });

  var range = mainSheet.getRange(2, 1, newArray.length, 1);

  range.setValues(newArray);
}