基于Node.js和node-xlsx开发一个Excel组件

栏目: Node.js · 发布时间: 5年前

内容简介:我们在用Excel表格的时候经常需要合并数据,比如统计整个年级的数据的时候,需要合并每个班成绩的时候,这就需要一个快速将很多张数据类型相同表合并的组件我们将文件放到excle里,而合并的结果放到result里

简述需求

我们在用Excel表格的时候经常需要合并数据,比如统计整个年级的数据的时候,需要合并每个班成绩的时候,这就需要一个快速将很多张数据类型相同表合并的组件

基于Node.js和node-xlsx开发一个Excel组件

需要的配置

  • 现在Node.js能够很好进行文件的读写操作,只要能读写就能合并
  • 社区已经有了封装好的一些插件比如node-xlsx,cnpm install就能用
  • 引入Node本来的文件读写工具
const xlsx = require('node-xlsx')
const fs = require('fs')

获取文件决定路径,定义合并数组

我们将文件放到excle里,而合并的结果放到result里

const _file = `${__dirname}/excel/`
const _output = `${__dirname}/result/`
let dataList = [
    {
        name: '提交成绩',//你sheet的名字
        data: []
    }]

读出数据

fs.readdir(_file, function(err, files) {}里可以将所有_file读出来放到files数组里

基于Node.js和node-xlsx开发一个Excel组件

基于Node.js和node-xlsx开发一个Excel组件

解析数据

let excelData = xlsx.parse(`${_file}${item}`)//拼接的绝对路径
console.log(excelData)
console.log(excelData[0].data)

基于Node.js和node-xlsx开发一个Excel组件

基于Node.js和node-xlsx开发一个Excel组件

提取数据进行拼接

files.forEach((item, index) => {
            try {
                console.log(`开始合并:${item}`)
                let excelData = xlsx.parse(`${_file}${item}`)
            if (excelData) {
                    if (dataList[0].data.length > 0) {
                        excelData[0].data.splice(0, 1)
   
                    }
                    dataList[0].data = dataList[0].data.concat(excelData[0].data)
                }
            } catch (e) {
                console.log('excel表格内部字段不一致,请检查后再合并。')
            }
        })

写入新的文件

var buffer = xlsx.build(dataList)
        fs.writeFile(`${_output}resut.${new Date().getTime()}.xlsx`, buffer, function (err) {
            if (err) {
                throw err
            }
            console.log('\x1B[33m%s\x1b[0m', `完成合并:${_output}resut.${new Date().getTime()}.xlsx`)
        })

基于Node.js和node-xlsx开发一个Excel组件

完整代码

const xlsx = require('node-xlsx')
const fs = require('fs')
// excel文件夹路径(把要合并的文件放在excel文件夹内)
const _file = `${__dirname}/excel/`
const _output = `${__dirname}/result/`
let dataList = [
    {
        name: '提交成绩',
        data: []
    }]

init()
function init () {
    fs.readdir(_file, function(err, files) {
        console.log(files)
        if (err) {
            throw err
        }
        files.forEach((item, index) => {
            try {
                console.log(`开始合并:${item}`)
                let excelData = xlsx.parse(`${_file}${item}`)
            if (excelData) {
                    if (dataList[0].data.length > 0) {
                        excelData[0].data.splice(0, 1)
                    }
             
                    dataList[0].data = dataList[0].data.concat(excelData[0].data)
                }
            } catch (e) {
                console.log('excel表格内部字段不一致,请检查后再合并。')
            }
        })
        var buffer = xlsx.build(dataList)
        fs.writeFile(`${_output}resut.${new Date().getTime()}.xlsx`, buffer, function (err) {
            if (err) {
                throw err
            }
            console.log('\x1B[33m%s\x1b[0m', `完成合并:${_output}resut.${new Date().getTime()}.xlsx`)
        })
    })
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Inside Larry's and Sergey's Brain

Inside Larry's and Sergey's Brain

Richard Brandt / Portfolio / 17 Sep 2009 / USD 24.95

You’ve used their products. You’ve heard about their skyrocketing wealth and “don’t be evil” business motto. But how much do you really know about Google’s founders, Larry Page and Sergey Brin? Inside......一起来看看 《Inside Larry's and Sergey's Brain》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试