Node.js中利用js-xlsx处理xlsx文件的实现
作者:小阿阳啊
js-xlsx库是目前Github上star数量最多的处理Excel的库,本文介绍用 Node.js中的js-xls库来处理Excel文件,具有一定的参考价值,感兴趣的可以了解一下
简介
本文介绍用 Node.js 中的 js-xlsx 库来处理 Excel 文件。 js-xlsx 库是目前 Github 上 star 数量最多的处理 Excel 的库,功能强大,但上手难度稍大。
安装
cnpm install xlsx
附上cnpm的安装命令
npm install -g cnpm --registry=https://registry.npm.taobao.org
概念
在使用这个库之前,先介绍库中的一些概念。
workbook
对象,指的是整份 Excel 文档。我们在使用 js-xlsx
读取 Excel 文档之后就会获得 workbook
对象。
worksheet
对象,指的是 Excel 文档中的表。我们知道一份 Excel 文档中可以包含很多张表,而每张表对应的就是 worksheet
对象。
cell
对象,指的就是 worksheet
中的单元格,一个单元格就是一个 cell
对象。
它们的关系如下:
// workbook { SheetNames: ['sheet1', 'sheet2'], Sheets: { // worksheet 'sheet1': { // cell 'A1': { ... }, // cell 'A2': { ... }, ... }, // worksheet 'sheet2': { // cell 'A1': { ... }, // cell 'A2': { ... }, ... } } }
用法
基础用法
- 用 XLSX.readFile 打开 Excel 文件,返回 workbook
- 用 workbook.SheetNames 获取表名
- 用 workbook.Sheets[xxx] 通过表名获取表格
- 按自己的需求去处理表格
- 生成新的 Excel 文件
具体方法
读取EXCEL文件
import XLSX from 'xlsx'; const workbook = XLSX.readFile('someExcel.xlsx', opts);
获取 Excel 文件中的表
// 获取 Excel 中所有表名 const sheetNames = workbook.SheetNames; // 返回 ['sheet1', 'sheet2'] // 根据表名获取对应某张表 const worksheet = workbook.Sheets[sheetNames[0]];
通过 worksheet[address]
来操作表格,以!
开头的 key 是特殊的字段。
// 获取 A1 单元格对象 let a1 = worksheet['A1']; // 返回 { v: 'hello', t: 's', ... } // 获取 A1 中的值 a1.v // 返回 'hello' // 获取表的有效范围 worksheet['!ref'] // 返回 'A1:B20' worksheet['!range'] // 返回 range 对象,{ s: { r: 0, c: 0}, e: { r: 100, c: 2 } } // 获取合并过的单元格 worksheet['!merges'] // 返回一个包含 range 对象的列表,[ {s: { r: 0, c: 0 }, c: { r: 2, c: 1 } } ]
实战
var xlsx = require('xlsx') var fs = require("fs") var moment = require("moment") var os = require("os") //查找是否存在指定文件夹路径 if(fs.existsSync('./excel/字段枚举值配置表格')){ //读取文件夹下的所有文件名称 fs.readdir('./excel/字段枚举值配置表格/', function (err, files) { if (err) { throw err } console.log(files) //查找是否存在指定SQL文件夹路径 if(fs.existsSync('./sql')){ //创建SQL存储文件 fs.writeFile("./sql/字段枚举值配置.sql","" ,function(err) { if(err) { return console.log(err) } console.log("创建SQL存储文件成功") }) }else{ //创建文件夹 fs.mkdirSync('./sql', function(err){ if(err){ console.log(err); return; } //创建SQL存储文件 fs.writeFile("./sql/字段枚举值配置.sql","" ,function(err) { if(err) { return console.log(err); } console.log("创建SQL存储文件成功") }) }) } //主表自增DOC_ENTRY var num = 1; //遍历文件名数组,拼接SQL语句 files.forEach(function(d,n){ let workbook = xlsx.readFile('./excel/字段枚举值配置表格/'+d) let sheetNames = workbook.SheetNames sheetNames.forEach(function(sheetName,n) { var worksheet = workbook.Sheets[sheetName] var data = xlsx.utils.sheet_to_json(worksheet) let fieldsName = "DOC_ENTRY ,GROUP_NAME ,BUSINESS_OBJ ,BUSINESS_DEC ,FIELDS_NAME ,BUSINESS_REMARK ,CREATE_DATE" let fieldsValue = "("+num+",'模板名称','业务对象','对象描述','对象字段','备注','"+moment(Date.now()).format('YYYY-MM-DD HH:mm:ss')+"')"+os.EOL let sql = `INSERT INTO MDM_SYNC_ENUM_GROUP(${fieldsName}) VALUES ${fieldsValue}` //向存储文件追加SQL语句 fs.appendFileSync("./sql/字段枚举值配置.sql", sql) data.forEach(function(d,i){ let fieldsLineName = "DOC_ENTRY ,LINE_ID ,FIELDS_VALUE ,ENUM_NAME ,ENUM_ODATA ,ENUM_TYPE ,ENUM_VALUE" let fieldsLineValue = "("+num+","+num+"00"+i+",'0','"+data[i].Object+"','"+data[i].Emun+"','Interger','"+i+"')"+os.EOL let sql = `INSERT INTO MDM_SYNC_ENUM_GROUP_LINE(${fieldsLineName}) VALUES ${fieldsLineValue}` fs.appendFileSync("./sql/字段枚举值配置.sql", sql) }) num = num +1 }) }) }) }else{ //创建文件夹 fs.mkdirSync('./excel/字段枚举值配置表格', function(err){ if(err){ console.log(err); return; } }) console.log("未找到'excel/字段枚举值配置表格'文件夹,已创建该文件夹,请在'excel/字段枚举值配置表格'文件夹中放入SAP对应关系表格") }
参考资料
- https://github.com/SheetJS/js-xlsx
- http://stackoverflow.com/questions/30859901/parse-xlsx-with-node-and-create-json
到此这篇关于Node.js中利用js-xlsx处理xlsx文件的实现的文章就介绍到这了,更多相关Node xlsx文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!