web-dev-qa-db-fra.com

Convertir XLS en CSV sur le serveur dans Node

J'ai une application Web côté client, avec un serveur de nœud très minimal pour accéder à certaines données que le client ne peut pas. L'une de ces choses est les feuilles de calcul Excel avec les extensions .xls.

J'essaie de configurer mon serveur pour télécharger le xls, le convertir en csv, puis le renvoyer au client. J'ai fait la partie téléchargement, et je suis sûr que je peux comprendre la partie "renvoyer", mais je ne peux pas pour la vie de moi trouver une bonne bibliothèque pour convertir de xls en csv.

Quelqu'un peut-il m'orienter vers une bibliothèque qui peut le faire de manière simple? Le fichier Excel n'est qu'une feuille, pas de classeurs compliqués ou quoi que ce soit.

Ou y a-t-il une autre façon de faire à laquelle je ne pense pas?

13
fnsjdnfksjdb

Il n'y a pas de bibliothèque à ma connaissance, mais vous pouvez utiliser node-xlsx pour analyser le fichier Excel, obtenir les lignes et créer le CSV vous-même. Voici un exemple:

var xlsx = require('node-xlsx');
var fs = require('fs');
var obj = xlsx.parse(__dirname + '/test.xls'); // parses a file
var rows = [];
var writeStr = "";

//looping through all sheets
for(var i = 0; i < obj.length; i++)
{
    var sheet = obj[i];
    //loop through all rows in the sheet
    for(var j = 0; j < sheet['data'].length; j++)
    {
            //add the row to the rows array
            rows.Push(sheet['data'][j]);
    }
}

//creates the csv string to write it to a file
for(var i = 0; i < rows.length; i++)
{
    writeStr += rows[i].join(",") + "\n";
}

//writes to a file, but you will presumably send the csv as a      
//response instead
fs.writeFile(__dirname + "/test.csv", writeStr, function(err) {
    if(err) {
        return console.log(err);
    }
    console.log("test.csv was saved in the current directory!");
});
21
heinst

J'utilise ce package pour convertir XLSX en CSV: https://www.npmjs.com/package/xlsx

XLSX = require('xlsx');

const workBook = XLSX.readFile(inputFilename);
XLSX.writeFile(workBook, outputFilename, { bookType: "csv" });
3
Cassio