экспортировать HTML-таблицу, чтобы превзойти Angular 6 - PullRequest
0 голосов
/ 19 марта 2019

У меня есть такой объект:

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 Ответ

1 голос
/ 19 марта 2019

Вам не нужно повторять все элементы внутреннего массива, поэтому он создает много строк.

Учтите, что 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]);
}
...