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)
...这给出了“无法将数组转换为对象[][]”错误。
我对新手问题表示歉意。我已经看到了有关如何将值从多维数组复制到工作表范围的答案,但没有看到对象数组。
您是否希望生成以下形式的表格:
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)
输出是: