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

标签 javascript excel csv sharepoint xlsx

正如标题所说,我目前有一个从 SharePoint 列表数据创建的 CSV 文件,为了将此信息显示为电子表格,我想将其转换为 Excel XLSX 文件。我更喜欢在不依赖第三方库的情况下这样做。起初,我开始使用 ActiveX 对象来尝试重新创建和/或将 CSV 保存为 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 文件。提前致谢。

最佳答案

尝试在没有库的情况下手动尝试执行此操作将是一项艰巨的任务。虽然 OpenXML 文件的核心是基于 XML 的,但它们也被捆绑/压缩。

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

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

关于JavaScript - 将 CSV 转换为 XLSX(最好不使用库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37401510/

相关文章:

python - 是否可以让 csv.DictReader 将某些列格式化为字符串以外的格式?

javascript - 未捕获的范围错误 : Maximum call stack size exceeded error and Autocomplete dropdown closing when mouse over for my Autocomplete in Javascript/Jquery

Excel VBA 处理一个参数的 64 个值

sql - 为什么 ADODB 在更新时插入 NULL 值?

excel - 删除VBA中除一列之外的所有数据

javascript - d3.csv 将列值映射为对象中的键

javascript - AngularJS 分页到下拉菜单

javascript - Angular 2/4 将焦点设置在输入元素上

javascript - 如何将跨浏览器 JavaScript 替换为 jQuery

python - 拆分列并格式化列值