前言
为了避免每次需要跑批后,重新编写解析excel的代码,特将过程记录下来,方便后续自己使用。
引入包
const xlsx = require("xlsx")
const fs = require('fs')
const axios = require('axios')
文件及跑批url
// 文件路径
const file_path = "E:/跑批前数据.xlsx"
// 接口url
const url = ''
读取excel
// 读取文件
const buf = fs.readFileSync(file_path)
const workbook = xlsx.read(buf)
// 获取需要操作的sheet的名字
const sheetName = workbook.SheetNames[0]
// 拿到对应sheet里的内容
const worksheet = workbook.Sheets[sheetName]
定义一些变量
// excel需要写入的列的数据
let dataAla = []
// 最终修改完后生成新的sheet
let newsheet = {}
// 正则表达式拿到对应列的数据,此处指A列的数据,从第二行开始读取
const reg = /A([2-9]|[0-9]{2,})/
调用接口跑批
// 调用接口跑批
for(let key in worksheet){
if (Object.hasOwnProperty.call(worksheet, key)){
if(reg.test(key)){
// --------------------------调用接口分析区域,建议单独封装个方法--------------
// 修改或者接口调用分析后的数据
axios({
method: 'post',
url: url,
data: {
in: worksheet[key]['v'],
}
}).then(res=>{
// 为什么是res.data外要加一个[]呢,因为最终生成sheet的参数是二维数组
const newdata = [res.data]
// 此处的dataAla在函数体外面读取不到,建议可以将调用接口封装个方法
dataAla.push(newdata)
})
// --------------------------调用接口分析区域----------------------------------
}
}
}
结果写入新的excel
// 修改sheet里的数据,从C列的C2开始写入
newsheet = xlsx.utils.sheet_add_aoa(worksheet, dataAla, { origin: "C2"});
// 创建新的workbook
let newWorkBook =xlsx.utils.book_new()
// 追加数据到workbook,命名sheet页为”分析结果“
xlsx.utils.book_append_sheet(newWorkBook,newsheet,"分析结果")
// 最终数据写入磁盘
xlsx.writeFileXLSX(newWorkBook,"E:/跑批后数据.xlsx")
完整代码
const xlsx = require("xlsx")
const fs = require('fs')
const axios = require('axios')
// 文件路径
const file_path = "E:/跑批前数据.xlsx"
// 接口url
const url = ''
// 读取文件
const buf = fs.readFileSync(file_path)
const workbook = xlsx.read(buf)
// 获取各个sheet的名字
const sheetName = workbook.SheetNames[0]
// 拿到对应sheet里的内容
const worksheet = workbook.Sheets[sheetName]
// excel需要写入的列的数据
let dataAla = []
// 最终修改完后生成新的sheet
let newsheet = {}
// 正则表达式拿到对应列的数据
const reg = /A([2-9]|[0-9]{2,})/
// 调用接口跑批
for(let key in worksheet){
if (Object.hasOwnProperty.call(worksheet, key)){
if(reg.test(key)){
// --------------------------调用接口分析区域----------------------------------
// 修改或者接口调用分析后的数据
axios({
method: 'post',
url: url,
data: {
in: worksheet[key]['v'],
}
}).then(res=>{
const newdata = [res.data]
// 此处的dataAla在函数体外面读取不到,建议可以将调用接口封装个方法
dataAla.push(newdata)
})
// --------------------------调用接口分析区域----------------------------------
}
}
}
// 修改sheet里的数据,从C列的C2开始写入
newsheet = xlsx.utils.sheet_add_aoa(worksheet, dataAla, { origin: "C2"});
// 创建新的workbook
let newWorkBook =xlsx.utils.book_new()
// 追加数据到workbook,命名sheet页为”分析结果“
xlsx.utils.book_append_sheet(newWorkBook,newsheet,"分析结果")
// 最终数据写入磁盘
xlsx.writeFileXLSX(newWorkBook,"E:/跑批后数据.xlsx")