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});;
Παρακαλώ ενημερώστε με αν λειτουργεί ή αποτυγχάνει (και τυχόν μηνύματα σφάλματος).
Πρόσεχε και καλή τύχη.
