我有一个这样的对象:
obj = {'a': [1, 2, 3], 'b': [0, 0,0], 'c': [1, 0, 4]}
我将其显示在html表中,如下所示:
Code | sum1 | sum2 | sum 3
a | 1 | 2 | 3
b | 0 | 0 | 0
c | 1 | 0 | 4
我想将此表导出到excel。这是我的代码:
export() {
let w = new Workbook();
let ws = w.addWorksheet('Sheet 1');
ws.addRow(['Code', 'sum1', 'sum2', 'sum3'])
for (let i = 0; i < this.obj['a'].length; i++) {
ws.addRow(['a', this.obj['a'][i]])
}
for (let i = 0; i < this.obj['a'].length; i++) {
ws.addRow(['b', this.obj['b'][i]])
}
for (let i = 0; i < this.obj['a'].length; i++) {
ws.addRow(['c', this.obj['c'][i]])
}
}
但这不会将对象添加到行上,而是添加到列上(类似这样:)
Code | sum1 | sum2 | sum3
a | 1 | |
a | 2 | |
a | 3 | |
b | 0 | |
b | 0 | |
b | 0 | |
c | 1 | |
c | 0 | |
c | 4 | |
我该如何解决?谢谢您的时间!
答案 0 :(得分:1)
您不需要迭代所有内部数组元素,这就是为什么它创建许多行的原因。
请考虑到addRow
每次都会添加一行,因此您需要确保要添加的数组具有与数组['Code', 'sum1', 'sum2', 'sum3']
相同的列数。使用unshift
将键('a','b','c')插入每个数组的前面。
this.obj['a'].unshift('a');
ws.addRow(this.obj['a']);
对“ b”和“ c”执行相同操作。
如果您不想修改原始数组,也可以将“ a”及其元素解压缩到新数组中。
(也可以对obj键进行迭代,而不必重复上述三遍。)
迭代键以取消移位可能看起来像这样:
let k;
for (k of Object.keys(this.obj)) {
this.obj[k].unshift(k);
ws.addRow(this.obj[k]);
}