node express如何實(shí)現(xiàn)json轉(zhuǎn)Excel
node express實(shí)現(xiàn)json轉(zhuǎn)Excel
有些場(chǎng)景我們需要將json或js中的數(shù)據(jù)對(duì)象轉(zhuǎn)換成Excel文檔,作為一個(gè)前端,服務(wù)框架最應(yīng)該熟悉的就是node了,以下是基于多語(yǔ)言轉(zhuǎn)換實(shí)現(xiàn)代碼,看明白原理自己改一改就能用了
1.安裝node環(huán)境
2.創(chuàng)建一個(gè)文件夾,文件夾中創(chuàng)建 package.json內(nèi)容如下
{ "dependencies": { "express": "^4.18.2", "fs": "^0.0.1-security", "node-xlsx": "^0.23.0" } }
3.命令行切至文件夾內(nèi),執(zhí)行命令 npm i
4.文件夾內(nèi)創(chuàng)建 JsonToExcel.js,與package.json同級(jí)
var xlsx = require('node-xlsx'); const fs = require('fs'); var jsonPs = require('./json_zh/zh.json'); const dataList = [] // json轉(zhuǎn)excel for (k in jsonPs) { // 組合每一行的key value 列 dataList.push([k, jsonPs[k]]) } console.log('dataList:', dataList) const list = [ { name: "sheet", // 工作薄的名稱 data: [ // ["第1行第1列", "第1行第2列", "第1行第3列"], // ["第2行第1列", "第2行第2列", "第2行第3列"] ...dataList ], }, // 如果多個(gè)工作薄, 就是多個(gè)對(duì)象。格式如上 ]; // 使用提供的構(gòu)建 xlsx 文件的方法 const buffer = xlsx.build(list); fs.writeFile('fileList/zh.xls', buffer, (err) => { if (err) { console.log(err, "導(dǎo)出excel失敗"); } else { console.log("導(dǎo)出excel成功!"); } });
5.導(dǎo)入來(lái)源和導(dǎo)出生成文件路徑根據(jù)自己實(shí)際情況定義
6.執(zhí)行命令 node JsonToExcel.js
nodeJS把json數(shù)據(jù)轉(zhuǎn)成excel(xlsx文件)輸出
最近做網(wǎng)站爬蟲,爬取到的數(shù)據(jù)保存到一個(gè)name.json文件中
數(shù)據(jù)結(jié)構(gòu)大概是這樣的:
可以利用nodeJS把這個(gè)json文件轉(zhuǎn)成xlsx文件輸出,當(dāng)然瀏覽器環(huán)境也可以做到,網(wǎng)上有相關(guān)的方法。
我這里使用了fs模塊和第三方模塊json2xls
,所以要先安裝json2xls
:
npm install json2xls -D
// 在jsonToExcel.js中先引入核心模塊
const fs = require('fs') const json2xls = require('json2xls');
然后利用readFile
讀取json文件,在回調(diào)函數(shù)中遍歷數(shù)組,在對(duì)象temp
中定義表格需要展示的字段,再把temp
添加到一個(gè)新的數(shù)組jsonArray
。
接著把jsonArray
作為參數(shù)去調(diào)用json2xls
方法,最后使用writeFileSync
輸出xlsx文件。
fs.readFile('name.json','utf8',(err,data)=>{ if (err) throw err; const json = JSON.parse(data); const jsonArray = []; json.forEach(function(item){ let temp = { '類型' : item.type, '問(wèn)題' : item.question, '答案' : item.trueAnswer } jsonArray.push(temp); }); let xls = json2xls(jsonArray); fs.writeFileSync('name.xlsx', xls, 'binary'); })
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
node實(shí)現(xiàn)基于token的身份驗(yàn)證
這篇文章主要介紹了node實(shí)現(xiàn)基于token的身份驗(yàn)證,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04Node.js、Socket.IO和GPT-4構(gòu)建AI聊天機(jī)器人的項(xiàng)目實(shí)踐
本文主要介紹了Node.js、Socket.IO和GPT-4構(gòu)建AI聊天機(jī)器人的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05提升node.js中使用redis的性能遇到的問(wèn)題及解決方法
本文中提到的node redis client采用的基于node-redis封裝的二方包,因此問(wèn)題排查也基于node-redis這個(gè)模塊。接下來(lái)通過(guò)本文給大家分享提升node.js中使用redis的性能2018-10-10Nodejs+express+ejs簡(jiǎn)單使用實(shí)例代碼
本篇文章主要介紹了Nodejs+express+ejs簡(jiǎn)單使用實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09