最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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 的庫,功能強大,但上手難度稍大。

安裝

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 命令行程序開發(fā)教程

    詳解Node.js 命令行程序開發(fā)教程

    一種編程語言是否易用,很大程度上,取決于開發(fā)命令行程序的能力。本篇文章主要介紹了Node.js 命令行程序開發(fā)教程,有興趣的可以了解一下
    2017-06-06
  • node終端里如何連接mysql數(shù)據(jù)庫并進(jìn)行sql查詢

    node終端里如何連接mysql數(shù)據(jù)庫并進(jìn)行sql查詢

    這篇文章主要為大家介紹了node終端里如何連接mysql數(shù)據(jù)庫并進(jìn)行sql查詢,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Node.js  事件循環(huán)詳解及實例

    Node.js 事件循環(huán)詳解及實例

    這篇文章主要介紹了 Node.js 事件循環(huán)詳解及實例的相關(guān)資料,Node.js 有多個內(nèi)置的事件,我們可以通過引入 events 模塊,并通過實例化 EventEmitter 類來綁定和監(jiān)聽事件,需要的朋友可以參考下
    2017-08-08
  • Node處理CPU密集型任務(wù)有哪些方法

    Node處理CPU密集型任務(wù)有哪些方法

    這篇文章主要介紹了Node處理CPU密集型任務(wù)有哪些方法,Node是一個非阻塞I/O和事件驅(qū)動的JavaScript運行環(huán)境,所以它非常適合用來構(gòu)建I/O密集型應(yīng)用,例如Web服務(wù)等
    2022-09-09
  • 安裝Node.js并創(chuàng)建Web程序

    安裝Node.js并創(chuàng)建Web程序

    這篇文章介紹了安裝Node.js并創(chuàng)建Web程序的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Node.js使用http模塊實現(xiàn)后臺服務(wù)器流程解析

    Node.js使用http模塊實現(xiàn)后臺服務(wù)器流程解析

    這篇文章將會教會你前端工程師怎么搭建后臺服務(wù)器,做自己的后端開發(fā),同時,在這篇文章開始你就開始正式進(jìn)入全棧的道路咯!本片文章將細(xì)解http模塊,在開始前我們將復(fù)習(xí)一點計算機網(wǎng)絡(luò)的知識
    2022-09-09
  • npm鏡像源證書過期的問題解決

    npm鏡像源證書過期的問題解決

    因為npm官方鏡像在國內(nèi)訪問很慢,我們基本上都會選擇切換到國內(nèi)的一些npm鏡像,本文主要介紹了npm鏡像源證書過期的問題解決,具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • node.js中的fs.read方法使用說明

    node.js中的fs.read方法使用說明

    這篇文章主要介紹了node.js中的fs.read方法使用說明,本文介紹了fs.read方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • NodeJS簡單實現(xiàn)WebSocket功能示例

    NodeJS簡單實現(xiàn)WebSocket功能示例

    這篇文章主要介紹了NodeJS簡單實現(xiàn)WebSocket功能,結(jié)合具體實例形式分析了nodejs實現(xiàn)WebSocket通信功能的客戶端與服務(wù)器端相關(guān)操作技巧,需要的朋友可以參考下
    2018-02-02
  • 深入理解node.js之path模塊

    深入理解node.js之path模塊

    本篇文章主要介紹了深入理解node.js之path模塊,詳細(xì)介紹了path模塊的用法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05

最新評論

合水县| 息烽县| 资溪县| 普兰店市| 永康市| 泽普县| 项城市| 镇沅| 牙克石市| 秦皇岛市| 同江市| 长岛县| 新乡县| 城固县| 中西区| 衡水市| 西藏| 罗平县| 收藏| 晋中市| 商都县| 黑山县| 云和县| 元氏县| 竹北市| 类乌齐县| 江油市| 奉化市| 石林| 鄄城县| 灵丘县| 利辛县| 麟游县| 石城县| 惠来县| 进贤县| 深水埗区| 将乐县| 高密市| 监利县| 弥勒县|