JavaScript-将CSV转换为XLSX(最好不使用库)

问题描述 投票:6回答:1

正如标题所述,我目前有一个根据SharePoint列表数据创建的CSV文件,为了将该信息显示为电子表格,我想将其转换为Excel XLSX文件。我宁愿不依赖第三方库来执行此操作。最初,我开始使用ActiveX对象尝试将CS​​V重新创建和/或保存为XLSX,但是存在一个限制,因为我不能在IE之外的其他浏览器中真正使用它。我在考虑使用Blob进行某种转换吗?那就是我被困住的地方。

function createCsv(data) {
    var result = "";

    if (data == null || data.length == 0) {
        return;
    }

    var columnDelimiter = ',';
    var lineDelimiter = '\n';

    var keys = Object.keys(data[0]);

    // spreadsheet header

    result += keys.join(columnDelimiter);
    result += lineDelimiter;

    // spreadsheet data

    data.forEach(function (obj) {
        var count = 0;

        keys.forEach(function (key) {
            if (count > 0) {
                result += columnDelimiter;
            }

            result += obj[key];
            count++;               
        });

        result += lineDelimiter;
    });

    return result;
}

function downloadCsv(csv) {
    if (csv == null) {
        return;
    }

    var filename = "test.csv";

    csv = "data:text/csv;charset=utf-8," + csv;

    var data = encodeURI(csv);

    console.log(data);

    var link = document.getElementById('csv');
    link.setAttribute('href', data);
    link.setAttribute('download', filename);

    console.log(link);

    //displayCsv(csv);
}

function displayCsv() {
    // using test csv here
    var message = "data:text/csv;charset=utf-8, yo, hey, lol";
    //var fileType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    var fileType = "application/msexcel";

    var csvFile = new Blob([message], {type: fileType});
    var csvUrl = URL.createObjectURL(csvFile);

    console.log(csvFile);
    console.log(csvUrl);

}

CSV与使用电子表格的效果很好(通过在Excel中下载并打开它),但是我确实需要一种将其显示为网页上的电子表格而不是文本的方式,所以这就是为什么我希望将其转换为。由于我在SharePoint中使用此功能,因此我可以使用Excel Web部件显示XLSX-尽管它不会像这样打开CSV文件。预先感谢。

javascript excel csv sharepoint xlsx
1个回答
0
投票

尝试在没有库的情况下手动尝试这样做是相当大的努力。尽管OpenXML文件以XML为核心,但它们也被捆绑/压缩。

我建议您看一下SheetJS。 https://sheetjs.com/

您可以将CSV作为输入,并立即将其写回XSLX。

© www.soinside.com 2019 - 2024. All rights reserved.