基於Node.js和node-xlsx開發一個Excel組件

簡述需求

我們在用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`)
        })
    })
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章