我们在日常中经常会遇到excel数据处理等情况,如将excel 1中的数据处理后存入 excel2中,或者将其他格式数据存入excel中,我们可以借助node来处理一下简单重复的工作。
下载node-xlsx 自行安装,安装命令如下:
npm i node-xlsx
读取、写入文件
const xlsx = require('node-xlsx');
const fs = require('fs');
function readFile () {
try {
var tableData = xlsx.parse("bncs.csv");
// 获取表格第一个sheet中的数据
const item = tableData[0].data;
handelData(item);
}
catch (e) {
//输出日志
console.log("excel读取异常,error=%s", e.stack);
}
}
// 处理数据
function handelData (item) {
let arr = [];
// 根据自己需求选择从第几项开始循环
for (let i = 1; i < item.length; i++) {
const [add_time, modify_time, bh, mc, dz, jd, wd, szdxzqh] = item[i];
let xzqhdm = JSON.parse(szdxzqh || "{}");
let xzqh = xzqhdm.XZQHBH || "";
let ele = [add_time, modify_time, bh, mc, dz, jd, wd, xzqh];
arr.push(ele)
}
const sheets = [
// 第一个sheet,如果有多个sheet在后面追加
{
name: 'sheet1', //sheet 名称
data: arr
}
];
writeFile(sheets)
}
// 调用读取文件
readFile();
// 设置表格样式
/**
* 行、列计数是从下标 0 开始; r是列,c是行 (row,column 的简写)
*/
const sheetOptions = {
'!merges': [{ s: { c: 6, r: 3 }, e: { c: 8, r: 5 } }], // 合并列 A4 - A6 行 7- 9
'!cols': [{ wch: 6 }, { wch: 7 }, { wch: 10 }, { wch: 40 }] // 设置列宽
};
// 写入文件
async function writeFile (sheets) {
// 生成 xlsx buffer
const buffer = await xlsx.build(sheets, { sheetOptions });
// 判断写入的这个文件是否存在,有则先删除后创建,无则直接创建
await fs.stat('./res.csv', function (err, result) {
// 无则直接创建
if (!result) {
fs.writeFileSync('./res.csv', buffer);
return false;
}
// 有则先删除
fs.unlink('./res.csv', (unErr) => {
// 删除成功; 删除的文件已经被打开也会导致删除文件失败
if (!unErr) {
fs.writeFileSync('./res.csv', buffer);
}
})
})
}
// 调用写入文件
writeFile(sheets);
设置合并列,设置列宽等操作后效果
注:在读取csv文件时可能会出现文件乱码的情况,解决方案:通过过记事本打开,另存为格式选择utf-8即可。