Node.js中利用js-xlsx处理xlsx文件的实现

 更新时间:2023年10月30日 10:39:23   作者:小阿阳啊  
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对应关系表格")
}

参考资料

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

相关文章

  • 你一定会收藏的Nodejs代码片段

    你一定会收藏的Nodejs代码片段

    Nodejs值得收集的代码片段,大家可以收藏起来,运用到之后的工作中,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • Node.js使用express写接口的具体代码

    Node.js使用express写接口的具体代码

    这篇文章主要介绍了Node.js使用express写接口,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • nodejs使用Express框架写后端接口的全过程

    nodejs使用Express框架写后端接口的全过程

    最近学习了基于前后端分离的开发模式,我前端使用Vue框架,后端使用nodejs开发API接口,下面这篇文章主要给大家介绍了关于nodejs使用Express框架写后端接口的相关资料,需要的朋友可以参考下
    2022-05-05
  • Node.js如何提取文件中的中文字符

    Node.js如何提取文件中的中文字符

    这篇文章主要介绍了Node.js如何提取文件中的中文字符,本文介绍了在Node.js开发中如何使用代码提取文件中的中文字符,帮助开发者更好地处理中文文本数据,提高开发效率
    2023-05-05
  • Node.js API详解之 timer模块用法实例分析

    Node.js API详解之 timer模块用法实例分析

    这篇文章主要介绍了Node.js API详解之 timer模块用法,结合实例形式分析了Node.js API中timer模块基本功能、原理、用法及操作注意事项,需要的朋友可以参考下
    2020-05-05
  • 初始Nodejs

    初始Nodejs

    本文属于nodejs的基础知识介绍篇,从nodejs的基本概念,到架构示意图,同步异步等方面做了详细的解答,是篇非常不错的文章
    2014-11-11
  • 深入理解Node.js的HTTP模块

    深入理解Node.js的HTTP模块

    最近在工作中接触到了Node.js标准库提供了http模块,所以这篇文章想总结下Node.js的HTTP模块,方便大家和自己以后使用的时候参考借鉴。有需要的朋友们下面来一起看看吧。
    2016-10-10
  • Nodejs监控事件循环异常示例详解

    Nodejs监控事件循环异常示例详解

    这篇文章主要给大家介绍了关于Nodejs监控事件循环异常的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Nodejs具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • Node 模块原理与用法详解

    Node 模块原理与用法详解

    这篇文章主要介绍了Node 模块原理与用法,结合实例形式详细分析了node.js模块基本概念、原理、用法及操作注意事项,需要的朋友可以参考下
    2020-05-05
  • nodejs 搭建简易服务器的图文教程(推荐)

    nodejs 搭建简易服务器的图文教程(推荐)

    下面小编就为大家带来一篇nodejs 搭建简易服务器的图文教程(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07

最新评论