Nodejs中的JSON转Excel转换

10

我正试图将大量的JSON数据转换为Excel,并尝试了几个模块。以下是我的研究结果,如果有人用过更好的能处理更多数据的node模块,请告诉我,这样我就可以探索一下。

json2xls

一个长度为100,000的JSON数组花费了402574ms,但当我超过200,000时,它会报错:FATAL ERROR: CALL_AND_RETRY_2 Allocation failed - process out of memory

node-xls

一个长度为100,000的JSON数组花费了444578ms

我在一个Windows 7系统上尝试了这个,拥有8GB RAM、Intel Core i7、CPU @ 2.10Ghz - 2.70Ghz。


1
我尝试了 https://www.npmjs.com/package/json-2-csv,目前为止它已经完美地工作了。我尝试写入了 1,048,576 并花费了 2分钟 - tomalex
尝试一下这个!https://www.npmjs.com/package/json2xls - vijay kumar
4个回答

8

首先将您的数据推入一个临时数组中,并提取所需列,然后将其转换为xls格式。我是按照以下方式完成的:

// use the below package to convert json to xls
var json2xls = require('json2xls');

json.forEach(function(instance, indexx,record){
        var tempArry = {
            'ColoumnName1' : record[indexx].columnNameVlaue,
            'ColoumnName2' : record[indexx].columnNameVlaue,
            'ColoumnName3' : record[indexx].columnNameVlaue,
            'ColoumnName4' : record[indexx].columnNameVlaue
        }
        jsonArray.push(tempArry);
    });
//this code is for sorting  xls with required value
    jsonArray.sort(function(a, b) {
        return parseFloat(b.ColoumnName4) - parseFloat(a.ColoumnName4);
    });
    var xls = json2xls(jsonArray);

    fs.writeFileSync('yourXLName.xlsx', xls, 'binary');

不要尝试将所有数据添加到Excel文件中,只使用想要保存在文件中的特定列。


请问您导出了多少数据?我之前说过我们大约有300万条记录。 - tomalex
接近一万了,我完全不知道如何处理三百万条记录。 - Maximus

2
如果这是一个 Node.js 项目,则执行以下操作:
const xlsx = require("xlsx")//npm install xlsx
const fs = require("fs")//npm install fs
var rawFile = fs.readFileSync("./datas.json")//dir of your json file as param
var raw = JSON.parse(rawFile)
var files  = []
for (each in raw){
    files.push(raw[each])
    }  
   var obj = files.map((e) =>{
        return e
       })

   var newWB = xlsx.book_new()

   var newWS = xlsx.utils.json_to_sheet(obj)

   xlsx.utils.book_append_sheet(newWB,newWS,"name")//workbook name as param

   xlsx.writeFile(newWB,"Sample-Sales-Data.xlsx")//file name as param

xlsx.book_new 不是一个函数。 - Vipin Verma

1
在Ratul Das的回答中,以下行有一个拼写错误:
var newWB = xlsx.book_new()

代码应该这样写:
var newWB = xslx.utils.book_new()

以下是我使用的代码片段,用于从名为imageList的JSON对象数组生成Excel电子表格:
const workSheet = XLSX.utils.json_to_sheet(imageList);
const workBook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workBook, workSheet, "Product Image Catalog");

// Generate buffer
XLSX.write(workBook, {bookType: 'xlsx', type: 'buffer'})

// Binary String
XLSX.write(workBook, {bookType: 'xlsx', type: 'binary'})

XLSX.writeFile(workBook, 'image-catalog.xlsx')

建立缓冲区有助于处理大量数据。


0

如果您的JSON已经格式正确,您只需要执行以下操作:

const json2xls = require('json2xls');

// Example JSON
const json = [{firstName: 'Bob', name: 'Lennon'}, {firstName: 'Jack', name: 'Sparrow'}]

const xls = json2xls(json);
fs.writeFileSync('exported.xlsx', xls, 'binary');

运行良好,而且非常简单。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接