将html表导出到excel Angular 6

时间:2019-03-19 10:19:34

标签: angular angular6 exceljs

我有一个这样的对象:

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    |      |

我该如何解决?谢谢您的时间!

1 个答案:

答案 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]);
}