Google Apps 脚本:如何将对象数组复制到范围?

Suz*_*nne 2 javascript arrays object google-sheets google-apps-script

我有一个名为的对象数组membership

[{name: 'Linus Pauling', address: '1805 Main Street', phone: '(615) 555-1010', 
  email: 'linus.pauling@gmail.com' },

 {name: 'Maury Povich', address: '382 North Street', phone: '(423) 555-1997', 
  email: 'maury@themauryshow.org'}]
Run Code Online (Sandbox Code Playgroud)

(虽然这里只显示了 4 个,但每个成员实际上有 10 个键/值对。)

将此数组的位复制到 Google 表格中的一系列单元格的最佳方法是什么?我试图找到一种方法来直接调用对象值,并使用 .SetValues 方法来批量复制它们,而不是一次复制一个。

为了获取 A 列中所有成员的姓名,我尝试过:

sheet.getRange(1,1,membership.length,1).setValues(membership[{member.name}]);
Run Code Online (Sandbox Code Playgroud)

...这使Missing : after property ID.

或者:

sheet.getRange(1,1,membership.length,1).setValues([membership[name]]);
Run Code Online (Sandbox Code Playgroud)

...这给出了 ReferenceError: “name” 未定义。

或者:

sheet.getRange(1,1,membership.length,1).setValues([member.name]);
Run Code Online (Sandbox Code Playgroud)

...这给出了“无法将数组转换为对象[][]”错误。

我对新手问题表示歉意。我已经看到了有关如何将值从多维数组复制到工作表范围的答案,但没有看到对象数组。

Bar*_*rdy 5

您是否希望生成以下形式的表格:

name | Address | phone | email
-----+---------+-------+------
.... | ....    | ....  | ....
Run Code Online (Sandbox Code Playgroud)

ETC?

如果是这样,那么以下代码片段可能会有所帮助。这里要指出的关键是,在迭代对象时不能期望给定的顺序。即,仅仅因为您首先表示membership列表name,并不意味着如果您要使用for ... in循环,您可以保证name会首先返回 - JavaScript 中的对象是无序的

为了确保给定的顺序,我列出的代码片段定义了一个数组headings,您可以在其中指定工作表中所需列的顺序。这用于保证输出中的列顺序:

var membership = [
  {
    name: 'Linus Pauling', address: '1805 Main Street', phone: '(615) 555-1010', 
    email: 'linus.pauling@gmail.com'
  },
  {
    name: 'Maury Povich', address: '382 North Street', phone: '(423) 555-1997', 
    email: 'maury@themauryshow.org'
  }
];

// Headings in the column order that you wish the table to appear.
var headings = ['name', 'address', 'phone', 'email'];
var outputRows = [];

// Loop through each member
membership.forEach(function(member) {
  // Add a new row to the output mapping each header to the corresponding member value.
  outputRows.push(headings.map(function(heading) {
    return member[heading] || '';
  }));
});

// Write to sheets
if (outputRows.length) {
  // Add the headings - delete this next line if headings not required
  outputRows.unshift(headings);
  SpreadsheetApp.getActiveSheet().getRange(1, 1, outputRows.length, outputRows[0].length).setValues(outputRows);
}
Run Code Online (Sandbox Code Playgroud)

输出是:

在此输入图像描述