欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Node.js中利用js-xlsx處理xlsx文件的實現(xiàn)

 更新時間:2023年10月30日 10:39:23   作者:小阿陽啊  
js-xlsx庫是目前Github上star數(shù)量最多的處理Excel的庫,本文介紹用 Node.js中的js-xls庫來處理Excel文件,具有一定的參考價值,感興趣的可以了解一下

簡介

本文介紹用 Node.js 中的 js-xlsx 庫來處理 Excel 文件。 js-xlsx 庫是目前 Github 上 star 數(shù)量最多的處理 Excel 的庫,功能強(qiáng)大,但上手難度稍大。

安裝

cnpm install xlsx

附上cnpm的安裝命令

npm install -g cnpm --registry=https://registry.npm.taobao.org

概念

在使用這個庫之前,先介紹庫中的一些概念。

workbook 對象,指的是整份 Excel 文檔。我們在使用 js-xlsx 讀取 Excel 文檔之后就會獲得 workbook 對象。

worksheet 對象,指的是 Excel 文檔中的表。我們知道一份 Excel 文檔中可以包含很多張表,而每張表對應(yīng)的就是 worksheet 對象。

cell 對象,指的就是 worksheet 中的單元格,一個單元格就是一個 cell 對象。

它們的關(guān)系如下:

// workbook
{
    SheetNames: ['sheet1', 'sheet2'],
    Sheets: {
        // worksheet
        'sheet1': {
            // cell
            'A1': { ... },
            // cell
            'A2': { ... },
            ...
        },
        // worksheet
        'sheet2': {
            // cell
            'A1': { ... },
            // cell
            'A2': { ... },
            ...
        }
    }
}

用法

基礎(chǔ)用法

  • 用 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']
// 根據(jù)表名獲取對應(yīng)某張表
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 } } ]

實戰(zhàn)

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')){
            //創(chuàng)建SQL存儲文件
            fs.writeFile("./sql/字段枚舉值配置.sql","" ,function(err) {
                if(err) {
                    return console.log(err)
                }
                console.log("創(chuàng)建SQL存儲文件成功")
            })
        }else{
            //創(chuàng)建文件夾
            fs.mkdirSync('./sql', function(err){
                if(err){
                console.log(err);
                return;
                }
                //創(chuàng)建SQL存儲文件
                fs.writeFile("./sql/字段枚舉值配置.sql","" ,function(err) {
                    if(err) {
                        return console.log(err);
                    }
                    console.log("創(chuàng)建SQL存儲文件成功")
                })
            })
        }

        //主表自增DOC_ENTRY
        var num = 1;

        //遍歷文件名數(shù)組,拼接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+",'模板名稱','業(yè)務(wù)對象','對象描述','對象字段','備注','"+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{
    //創(chuàng)建文件夾
    fs.mkdirSync('./excel/字段枚舉值配置表格', function(err){
        if(err){
            console.log(err);
            return;
        }
    })
    console.log("未找到'excel/字段枚舉值配置表格'文件夾,已創(chuàng)建該文件夾,請在'excel/字段枚舉值配置表格'文件夾中放入SAP對應(yīng)關(guān)系表格")
}

參考資料

 到此這篇關(guān)于Node.js中利用js-xlsx處理xlsx文件的實現(xiàn)的文章就介紹到這了,更多相關(guān)Node xlsx文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Node.js使用Express.Router的方法

    Node.js使用Express.Router的方法

    這篇文章主要為大家詳細(xì)介紹了Node.js使用Express.Router的方法 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Node.js讀取和寫入文件的代碼示例

    Node.js讀取和寫入文件的代碼示例

    在現(xiàn)代前端開發(fā)中,Node.js已經(jīng)成為不可或缺的一部分,其高效的非阻塞I/O模型使得它非常適合處理文件操作,在這篇博客中,我們將探討如何使用Node.js讀取和寫入文件,我們會涉及基本的文件系統(tǒng)模塊,并提供可運行的代碼示例,以便您可以輕松上手
    2024-11-11
  • Node.js插件安裝圖文教程

    Node.js插件安裝圖文教程

    Node.js是一個基于Chrome JavaScript運行時建立的平臺, 用于方便地搭建響應(yīng)速度快、易于擴(kuò)展的網(wǎng)絡(luò)應(yīng)用。本文給大家介紹Node.js插件安裝的教程,非常實用,特此分享給大家,需要的朋友一起學(xué)習(xí)吧
    2016-05-05
  • Node.js Koa2使用JWT進(jìn)行鑒權(quán)的方法示例

    Node.js Koa2使用JWT進(jìn)行鑒權(quán)的方法示例

    這篇文章主要介紹了Node.js Koa2使用JWT進(jìn)行鑒權(quán)的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • 詳解express與koa中間件模式對比

    詳解express與koa中間件模式對比

    本篇文章主要介紹了詳解express與koa中間件模式對比,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • kafka調(diào)試中遇到Connection to node -1 could not be established. Broker may not be available.

    kafka調(diào)試中遇到Connection to node -1 could not be established. Br

    這篇文章主要介紹了kafka調(diào)試中遇到Connection to node -1 could not be established. Broker may not be available的解決方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-09-09
  • Node.js之IP地址和端口號問題

    Node.js之IP地址和端口號問題

    這篇文章主要介紹了Node.js之IP地址和端口號問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • node.js事件循環(huán)機(jī)制及與js區(qū)別詳解

    node.js事件循環(huán)機(jī)制及與js區(qū)別詳解

    這篇文章主要為大家介紹了node.js事件循環(huán)機(jī)制及與js區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Node.js 使用AngularJS的方法示例

    Node.js 使用AngularJS的方法示例

    這篇文章主要介紹了Node.js 使用AngularJS的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • 前端必會的nodejs知識工具模塊使用示例詳解

    前端必會的nodejs知識工具模塊使用示例詳解

    這篇文章主要為大家介紹了前端必會的nodejs知識工具模塊使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10

最新評論