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

深入淺出使用JS/TS輕松搞定Excel與XML互轉(zhuǎn)

 更新時間:2025年07月25日 09:44:17   作者:燭陰  
在一些場景下,程序化的Excel與XML轉(zhuǎn)換能力就顯得尤為重要,這篇文章主要為大家詳細介紹了如何使用JS/TS輕松搞定Excel與XML互轉(zhuǎn),感興趣的小伙伴可以了解下

一、 為什么需要Excel與XML互轉(zhuǎn)?

項目需求:

  • 數(shù)據(jù)導(dǎo)入導(dǎo)出: 比如我工作時候遇到的fairygui多語言,導(dǎo)出的是xml文件,策劃需要Excel文件。
  • 配置管理 、數(shù)據(jù)遷移 等,本質(zhì)就是需求雙方出現(xiàn)了對數(shù)據(jù)格式要求的不一致。

在這些場景下,程序化的Excel與XML轉(zhuǎn)換能力就顯得尤為重要。它能幫助我們告別繁瑣的手動操作,實現(xiàn)數(shù)據(jù)的自動化、批量化處理。

二、 核心工具庫安裝

安裝依賴

npm install xlsx xml2js ts-node typescript @types/node xml-js
npm install @types/xml2js @types/xlsx @types/xml-js -D

三、 Excel 轉(zhuǎn)換為 XML

這個過程的核心思想是:讀取Excel數(shù)據(jù) -> 將數(shù)據(jù)構(gòu)造成JavaScript對象 -> 將JavaScript對象轉(zhuǎn)換為XML格式。

3.1 讀取Excel數(shù)據(jù)并轉(zhuǎn)換成Json對象

假設(shè)我們有一個名為 users.xlsx 的Excel文件,內(nèi)容如下:

idnameemail
1Alicealice@163.com
2Bobbob@163.com
3Charliecharlie@163.com

我們可以使用 xlsx 來讀取它:

import * as XLSX from 'xlsx';

// 讀取Excel文件
const workbook = XLSX.readFile('users.xlsx');

// 獲取第一個工作表
const sheetName = workbook.SheetNames[0];
const worksheet = workbook.Sheets[sheetName];

// 將工作表轉(zhuǎn)換為JSON對象數(shù)組
const jsonData = XLSX.utils.sheet_to_json<{ id: number; name: string; email: string }>(worksheet);

console.log(jsonData);
/*
輸出:
[
  { id: 1, name: 'Alice', email: 'Alice@163.com' },
  { id: 2, name: 'Bob', email: 'Bob@163.com' },
  { id: 3, name: 'Charlie', email: 'Charlie@163.com' }
]
*/

3.2 將JSON數(shù)據(jù)轉(zhuǎn)換為XML

現(xiàn)在我們有了JavaScript對象數(shù)組,接下來使用 xml-js 將其轉(zhuǎn)換為XML格式。

import * as convert from 'xml-js';

// 假設(shè) jsonData 來自上一步
const dataForXml = {
    _declaration: { _attributes: { version: '1.0', encoding: 'utf-8' } },
    users: {
        user: jsonData.map((u) => ({
            _attributes: { id: u.id },
            name: { _text: u.name },
            email: { _text: u.email },
        })),
    },
};

const xmlData = convert.js2xml(dataForXml, { compact: true, spaces: 4 });

console.log(xmlData);

輸出的XML結(jié)果 (output.xml):

<?xml version="1.0" encoding="utf-8"?>
<users>
    <user id="1">
        <name>Alice</name>
        <email>Alice@163.com</email>
    </user>
    <user id="2">
        <name>Bob</name>
        <email>Bob@163.com</email>
    </user>
    <user id="3">
        <name>Charlie</name>
        <email>Charlie@163.com</email>
    </user>
</users>

四、XML 轉(zhuǎn)換為 Excel

反向操作的思路同樣清晰:讀取XML數(shù)據(jù) -> 將XML解析為JavaScript對象 -> 將JavaScript對象生成為Excel文件。

4.1 讀取并解析XML數(shù)據(jù)

假設(shè)我們有上一節(jié)生成的 output.xml 文件。

import * as fs from 'fs';
import * as convert from 'xml-js';

// 讀取XML文件內(nèi)容
const xmlFile = fs.readFileSync('output.xml', 'utf8');

// 將XML轉(zhuǎn)換為JavaScript對象
const jsonDataFromXml = convert.xml2js(xmlFile, { compact: true }) as any;

// 提取我們需要的用戶數(shù)據(jù)數(shù)組
const users = jsonDataFromXml.users.user.map((u: any) => ({
    id: u._attributes.id,
    name: u.name._text,
    email: u.email._text,
}));

console.log(users);
/*
[
  { id: '1', name: 'Alice', email: 'alice@163.com' },
  { id: '2', name: 'Bob', email: 'bob@163.com' },
  { id: '3', name: 'Charlie', email: 'charlie@163.com' }
]
*/

4.2 將JSON數(shù)據(jù)生成Excel文件

得到JavaScript對象數(shù)組后,我們再次請出 xlsx 來完成最后一步。

import * as XLSX from 'xlsx';

// 1. 創(chuàng)建一個新的工作簿
const newWorkbook = XLSX.utils.book_new();

// 2. 將JSON數(shù)據(jù)轉(zhuǎn)換為工作表
const newWorksheet = XLSX.utils.json_to_sheet(users);

// 3. 將工作表附加到工作簿,并命名為 "Users"
XLSX.utils.book_append_sheet(newWorkbook, newWorksheet, 'Users');

// 4. 生成Excel文件并寫入磁盤
XLSX.writeFile(newWorkbook, 'users_from_xml.xlsx');

到此這篇關(guān)于深入淺出使用JS/TS輕松搞定Excel與XML互轉(zhuǎn)的文章就介紹到這了,更多相關(guān)JS Excel與XML互轉(zhuǎn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • js實現(xiàn)用戶注冊協(xié)議倒計時的方法

    js實現(xiàn)用戶注冊協(xié)議倒計時的方法

    這篇文章主要介紹了js實現(xiàn)用戶注冊協(xié)議倒計時的方法,是開發(fā)會員注冊功能時非常實用的技巧,需要的朋友可以參考下
    2015-01-01
  • 淺談javascript中的prototype和__proto__的理解

    淺談javascript中的prototype和__proto__的理解

    這篇文章主要介紹了淺談javascript中的prototype和__proto__的理解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • JavaScript屏蔽Backspace鍵的實現(xiàn)代碼

    JavaScript屏蔽Backspace鍵的實現(xiàn)代碼

    這篇文章主要介紹了JavaScript屏蔽Backspace鍵的實現(xiàn)代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-11-11
  • JavaScript中Map和Set數(shù)據(jù)結(jié)構(gòu)使用方法詳解

    JavaScript中Map和Set數(shù)據(jù)結(jié)構(gòu)使用方法詳解

    這篇文章主要介紹了JavaScript中Map和Set數(shù)據(jù)結(jié)構(gòu)使用方法的相關(guān)資料,Map是一種鍵值對集合,支持任意類型的鍵和值,保留插入順序,并提供多種遍歷和操作方法,Set是一種唯一值集合,通過哈希算法保證唯一性,提供添加、刪除、檢查元素的方法,需要的朋友可以參考下
    2025-03-03
  • 微信小程序數(shù)據(jù)存儲與取值詳解

    微信小程序數(shù)據(jù)存儲與取值詳解

    這篇文章主要為大家詳細介紹了微信小程序數(shù)據(jù)存儲與取值的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 微信小程序?qū)崿F(xiàn)簡單的select下拉框

    微信小程序?qū)崿F(xiàn)簡單的select下拉框

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)簡單的select下拉框,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • JavaScript格式化json和xml的方法示例

    JavaScript格式化json和xml的方法示例

    這篇文章主要介紹了JavaScript格式化json和xml的方法,結(jié)合實例形式分析了javascript格式化json及格式化xml數(shù)據(jù)的具體操作技巧,需要的朋友可以參考下
    2019-01-01
  • JavaScript中關(guān)于base64的一些事

    JavaScript中關(guān)于base64的一些事

    base64 其實是一種編碼轉(zhuǎn)換方式, 將 ASCII 字符轉(zhuǎn)換成普通文本, 是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)代碼的編碼方式之一。這篇文章重點給大家介紹JavaScript中關(guān)于base64的一些事,感興趣的朋友跟隨小編一起看看吧
    2019-05-05
  • JavaScript?數(shù)據(jù)結(jié)構(gòu)之集合創(chuàng)建(2)

    JavaScript?數(shù)據(jù)結(jié)構(gòu)之集合創(chuàng)建(2)

    這篇文章主要介紹了JavaScript?數(shù)據(jù)結(jié)構(gòu)之集合創(chuàng)建,上一篇我們介紹了什么是集合,并且手動實現(xiàn)了一個集合的類,本篇基于上篇內(nèi)容繼續(xù)深入介紹需要的小伙伴可以參考一下
    2022-04-04
  • js對數(shù)組中的數(shù)字從小到大排序?qū)崿F(xiàn)代碼

    js對數(shù)組中的數(shù)字從小到大排序?qū)崿F(xiàn)代碼

    對數(shù)組中的數(shù)字從小到大排序,很多時候需要用的多,需要的朋友可以參考下
    2012-09-09

最新評論

宝鸡市| 大关县| 锦屏县| 曲麻莱县| 色达县| 霍城县| 仙居县| 平顺县| 万山特区| 方山县| 中宁县| 梅河口市| 泉州市| 开封县| 江川县| 法库县| 乌恰县| 凤山县| 麻江县| 额敏县| 美姑县| 长春市| 西和县| 兖州市| 梅州市| 沾益县| 肃宁县| 吴桥县| 元朗区| 东阿县| 阿瓦提县| 荔浦县| 裕民县| 张家川| 灵璧县| 虎林市| 梅州市| 景谷| 蒙城县| 鹤壁市| 施甸县|