亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

簡(jiǎn)介

本文介紹用 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

概念

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

workbook 對(duì)象,指的是整份 Excel 文檔。我們?cè)谑褂?nbsp;js-xlsx 讀取 Excel 文檔之后就會(huì)獲得 workbook 對(duì)象。

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

cell 對(duì)象,指的就是 worksheet 中的單元格,一個(gè)單元格就是一個(gè) cell 對(duì)象。

它們的關(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ù)表名獲取對(duì)應(yīng)某張表
const worksheet = workbook.Sheets[sheetNames[0]];

通過 worksheet[address] 來操作表格,以!開頭的 key 是特殊的字段。

// 獲取 A1 單元格對(duì)象
let a1 = worksheet['A1']; // 返回 { v: 'hello', t: 's', ... }
// 獲取 A1 中的值
a1.v // 返回 'hello'

// 獲取表的有效范圍
worksheet['!ref'] // 返回 'A1:B20'
worksheet['!range'] // 返回 range 對(duì)象,{ s: { r: 0, c: 0}, e: { r: 100, c: 2 } }

// 獲取合并過的單元格
worksheet['!merges'] // 返回一個(gè)包含 range 對(duì)象的列表,[ {s: { r: 0, c: 0 }, c: { r: 2, c: 1 } } ]

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

        //主表自增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ù)對(duì)象','對(duì)象描述','對(duì)象字段','備注','"+moment(Date.now()).format('YYYY-MM-DD HH:mm:ss')+"')"+os.EOL
                let sql = `INSERT INTO MDM_SYNC_ENUM_GROUP(${fieldsName}) VALUES ${fieldsValue}`

                //向存儲(chǔ)文件追加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)建該文件夾,請(qǐng)?jiān)?excel/字段枚舉值配置表格'文件夾中放入SAP對(duì)應(yīng)關(guān)系表格")
}

參考資料

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

相關(guān)文章

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

    Node.js使用Express.Router的方法

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

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

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

    Node.js插件安裝圖文教程

    Node.js是一個(gè)基于Chrome JavaScript運(yùn)行時(shí)建立的平臺(tái), 用于方便地搭建響應(yīng)速度快、易于擴(kuò)展的網(wǎng)絡(luò)應(yīng)用。本文給大家介紹Node.js插件安裝的教程,非常實(shí)用,特此分享給大家,需要的朋友一起學(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)的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • 詳解express與koa中間件模式對(duì)比

    詳解express與koa中間件模式對(duì)比

    本篇文章主要介紹了詳解express與koa中間件模式對(duì)比,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    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的解決方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-09-09
  • Node.js之IP地址和端口號(hào)問題

    Node.js之IP地址和端口號(hào)問題

    這篇文章主要介紹了Node.js之IP地址和端口號(hào)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    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的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • 前端必會(huì)的nodejs知識(shí)工具模塊使用示例詳解

    前端必會(huì)的nodejs知識(shí)工具模塊使用示例詳解

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

最新評(píng)論