angular - Πέρασα έναν πίνακα στο 'xlsx' για να πάρω ένα αρχείο Excel αλλά τα στοιχεία του πίνακα εμφανίστηκαν κατανεμημένα σε κάθε γραμμή


Έχω έναν πίνακα τύπου T και επιθυμώ να τον μετατρέψω σε φύλλο εγγράφου Excel με τέτοιο τρόπο ώστε κάθε στοιχείο του πίνακα να καταχωρείται σε ξεχωριστή γραμμή στο φύλλο.

let arr = ['one', 'two', 'three']

Όταν περνάω αυτόν τον πίνακα σε μια συνάρτηση που πήρα από το διαδίκτυο:

static exportArrayToExcel(arr: any[], name?: string) {
        let { sheetName, fileName } = getFileName(name);

        var wb = XLSX.utils.book_new();
        var ws = XLSX.utils.json_to_sheet(arr);
        XLSX.utils.book_append_sheet(wb, ws, sheetName);
        XLSX.writeFile(wb, `${fileName}.xlsx`);
    }

Δεν συμπεριφέρεται όπως το περίμενα. Αντί να επιστρέψει ένα φύλλο στο οποίο κάθε γραμμή περιέχει το στοιχείο, διασκορπίζει κάθε στοιχείο σε κάθε κελί της γραμμής στο Excel. Για παράδειγμα: Αντί να

row1: |'one'|
row2: |'two'|
row3: |'three'|

Επιστρέφει:

row1: o | n |  e 
row2: t | w | o

κ.λπ.

Δεν ξέρω γιατί η συνάρτηση αναλύει κάθε στοιχείο του πίνακα και το διασκορπίζει.

Η συνάρτηση υπάρχει μέσα σε μια κλάση που ονομάζεται TableUtil:

import * as XLSX from "xlsx";

const getFileName = (name: string) => {
    let timeSpan = new Date().toISOString();
    let sheetName = name || "ExportResult";
    let fileName = `${sheetName}-${timeSpan}`;
    return {
        sheetName,
        fileName,
    };
};
export class TableUtil {
    static exportTableToExcel(tableId: string, name?: string) {
        let { sheetName, fileName } = getFileName(name);
        let targetTableElm = document.getElementById(tableId);
        let wb = XLSX.utils.table_to_book(targetTableElm, <
            XLSX.Table2SheetOpts
        >{
            sheet: sheetName,
        });
        XLSX.writeFile(wb, `${fileName}.xlsx`);
    }

    static exportArrayToExcel(arr: any[], name?: string) {
        let { sheetName, fileName } = getFileName(name);

        var wb = XLSX.utils.book_new();
        var ws = XLSX.utils.json_to_sheet(arr);
        XLSX.utils.book_append_sheet(wb, ws, sheetName);
        XLSX.writeFile(wb, `${fileName}.xlsx`);
    }
}

Απάντηση #1

Μπορεί να είναι επειδή ο πίνακάς σου δεν είναι γραμμένος σε JSON; Δες αυτή την ερώτηση στο SO.

Τι θα γινόταν αν δοκίμαζες

var ws = XLSX.utils.json_to_sheet([
  { A: "one", B: "two", C: "three" }
], {header: ["A", "B", "C"], skipHeader: true});;

Παρακαλώ ενημερώστε με αν λειτουργεί ή αποτυγχάνει (και τυχόν μηνύματα σφάλματος).

Πρόσεχε και καλή τύχη.