JavaScript-Convert CSV para XLSX (preferencialmente sem o uso de Bibliotecas)

Como diz o título, tenho actualmente um ficheiro CSV criado a partir de dados da lista SharePoint e, para mostrar esta informação como uma folha de cálculo, quero convertê-la para um ficheiro Excel XLSX. Prefiro fazer isto sem depender de uma biblioteca de terceiros. No início, eu comecei a usar objetos ActiveX para tentar recriar e / ou salvar o CSV como XLSX, mas há uma limitação com isso, uma vez que eu realmente não posso usá-lo em outros navegadores além de IE. Estava a pensar em usar o Blob para o converter de alguma forma? É onde estou preso.

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);

}

o CSV funciona bem com a utilização da folha de cálculo (baixando-a e abrindo-a no Excel), mas eu realmente preciso de uma forma de a exibir como uma folha de cálculo numa página web e não como texto, por isso é que eu estou a tentar convertê-la. Uma vez que eu estou usando isso dentro do SharePoint, então eu posso usar uma parte do Excel web para exibir o XLSX - ele não vai abrir arquivos CSV como este embora. Obrigado antecipadamente.

Author: LaLaLottie, 2016-05-24