基于Nodejs和nodexlsx开发一个Excel组件

61次阅读

共计 1849 个字符,预计需要花费 5 分钟才能阅读完成。

简述需求

我们在用 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 数组里


解析数据

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


提取数据进行拼接

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`)
        })

完整代码

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`)
        })
    })
}

正文完
 0