node.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > node.js > Node xlsx文件

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': { ... },
            ...
        }
    }
}

用法

基础用法

具体方法

读取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对应关系表格")
}

参考资料

 到此这篇关于Node.js中利用js-xlsx处理xlsx文件的实现的文章就介绍到这了,更多相关Node xlsx文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文