首页 > 解决方案 > 我将一个数组传递给“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

ETC...

我不知道为什么该函数会解析数组的每个元素并将其分散。

该函数存在于一个名为 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`);
    }
}

标签: arraysangularexceltypescript

解决方案


可能是因为你的数组不是用json写的吗?看到这个问题

如果你想试试

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

请让我知道它是否有效(以及最终的错误消息)。

保重,祝你好运。


推荐阅读