使用nodejs的xlsx工具解析excel进行跑批

前言

为了避免每次需要跑批后,重新编写解析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")

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值