node 抓取api数据导出为excel表格

本文介绍如何使用Node.js从API获取数据,并将其格式化后自动填充到Excel模板中,最终批量生成多个Excel文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

也是别人写的框架自己,自己忽然要用到,给改了下,具体框架怎么写的 也没细看,会用就行 以下 我尽可能把我知道的都写一下

1.先看下效果

在node环境下(实际就是安装了node软件) 设置环境变量 让node在任意路径都可以执行node命令(可以用 node -v测试)

双击运行auto.bat 即可生成:


这个框架依赖 第一个图的 ejs4xlx.js ejsExcel.js filter.js

auoExcel.js 是我写的 我仔细说一下 这个

1.先引入需要模块

const ejsexcel = require("./ejsExcel");
const fs = require("fs");
const util = require("util");
const http = require('http');  
const url = require('url');
const readFileAsync = util.promisify(fs.readFile);
const writeFileAsync = util.promisify(fs.writeFile);
复制代码

2.获取api数据 跟ajax获取数据是一样的 但是又不是ajax 因为那是浏览器对象 node是没有window.ActiveXObject或者window.XMLHttpRequest对象 以下是get请求 post 也差不多

(请求地址 我就不说了 不能给)

function getdata(type,nextfn){
	var urlstr ='http://*******&type='+type.index+'';
	http.get(urlstr, (res) => {
		var data = ''; //接口数据  
		res.on('data', (chunk) => {
			data += chunk; //拼接数据块  
		});
		res.on('end', function() {
			let redata = JSON.parse(data); //解析json 
			if(redata.msg == 'SUCCESS'){
				reflashdata(redata,type,nextfn);
			}else{
				console.log('-------------------获取数据失败-----------------');
			}
		})
	}).on('error', () =>
		console.log('获取数据出错!')
	);
}
复制代码

3.get到数据后,执行reflashdata(redata,type,nextfn); 对数据进行以下清洗 变成自己想要的这样的数据格式

function reflashdata(redata,typeobj,nextfn){
	var alldata = [[{"name":typeobj.name+"价格走势"}],[]];
	for(var i=0;i<redata.data.length;i++){
		var item={"day":"","a":"","b":"","c":"","d":"","e":""};
		item.day=new Date(redata.data[i].datetime*1000).format('MM-dd');
		item.a=parseInt(redata.data[i].history_price)+"/吨";
		...
		alldata[1].push(item);
	}
	nextfn(alldata);
}
复制代码

最后的数据格式是:

[[{"name":"棉花价格走势"}],[{"day":"05-30","a":"16323/吨","b":"","c":"","d":"","e":"14786/吨"},{"day":"05-31","a":"","b":"16323/吨","c":"16323/吨","d":"16323/吨","e":"14813/吨"}]]

因为我要生成 多个excel所以for循环里 执行多次获取数据 生成excel

function autoExcelfn() {
	var arr=[{"index":2,"name":'棉花'},{"index":1,"name":'玉米'},{"index":5,"name":'大豆'},{"index":23,"name":'春小麦'},{"index":2,"name":'水稻'}];
	var nowday=(new Date()).format('yyyy-MM-dd');
	fs.mkdirSync("./../农作物价格走势/"+nowday);
	for(var i in arr){
		//获得Excel模板的buffer对象
		//数据源
		(function(i){
			getdata(arr[i],function(data){
				(async function(data) {
					const exlBuf = await readFileAsync("./template1.xlsx");
					var exlBuf2 =await ejsexcel.renderExcel(exlBuf, data);
					await writeFileAsync("./../农作物价格走势/"+nowday+"/"+arr[i].name+"价格走势"+".xlsx", exlBuf2);
				})(data);
			});
		})(i)
	}
	console.log("生产成功!----------------------");
}
autoExcelfn();
复制代码

在获取数据的方法getdata的回调里 把整理好的数据 data 写到 excel,并生成excel文件

fs.mkdirSync("./../农作物价格走势/"+nowday); 在'./../农作物价格走势/' 生成 ‘2018-06-14’ 文件夹

const exlBuf = await readFileAsync("./template1.xlsx");读取模版excel

var exlBuf2 =await ejsexcel.renderExcel(exlBuf, data); 根据模版 填充数据

await writeFileAsync("./../农作物价格走势/"+nowday+"/"+arr[i].name+"价格走势"+".xlsx", exlBuf2); 写入

4.excel模版写法 相当于表格里写变量 数据根据变量位置 遍历循环

不上传我的项目了 大家直接下载源文档 研究吧

项目地址:https://gitee.com/ccteams/ejsExcel

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值