简述需求
我们在用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`)
})
})
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。