在节点中的服务器上将XLS转换为CSV

fns*_*jdb 10 csv excel xls node.js npm

我有一个客户端Web应用程序,具有非常小的节点服务器来访问客户端无法访问的某些数据.其中一个是带有.xls扩展名的excel电子表格.

我正在尝试将我的服务器设置为下载xls,将其转换为csv,然后将其发送回客户端.我已经完成了下载部分,我确信我可以找出"发回"部分,但我不能为我的生活找到一个好的库从xls转换为csv.

有人能指出我能以简单的方式做到这一点的图书馆吗?excel文件只是一个工作表,没有复杂的工作簿或任何东西.

还是有另一种方法可以做到这一点,我没想到?

Cas*_*sio 26

我正在使用此包将 XLSX 转换为 CSV:https : //www.npmjs.com/package/xlsx

XLSX = require('xlsx');

const workBook = XLSX.readFile(inputFilename);
XLSX.writeFile(workBook, outputFilename, { bookType: "csv" });
Run Code Online (Sandbox Code Playgroud)

  • 这看起来很优雅,但它会创建一个 csv 文件,其中包含 Excel 工作表中空单元格中的空值;因此,如果您要处理 csv 文件(例如循环遍历其值),这对您的 CPU 和内存来说将是非常巨大的。您需要迭代每张数据的长度;因此,我认为所选的答案更加稳健。 (3认同)
  • 这是非常优雅且简单的解决方案,所以我认为这应该是默认答案。 (2认同)

hei*_*nst 21

没有我知道的库,但您可以使用node-xlsx来解析excel文件,获取行并自己创建CSV.这是一个例子:

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!");
});
Run Code Online (Sandbox Code Playgroud)

  • @philipoghenerobobalogun 你试过了吗?因为它确实写入文件。这就是 `fs.writeFile(...` 正在做的 (2认同)