深入浅出使用JS/TS轻松搞定Excel与XML互转
作者:烛阴
在一些场景下,程序化的Excel与XML转换能力就显得尤为重要,这篇文章主要为大家详细介绍了如何使用JS/TS轻松搞定Excel与XML互转,感兴趣的小伙伴可以了解下
一、 为什么需要Excel与XML互转?
项目需求:
- 数据导入导出: 比如我工作时候遇到的
fairygui多语言,导出的是xml文件,策划需要Excel文件。 - 配置管理 、数据迁移 等,本质就是需求双方出现了对数据格式要求的不一致。
在这些场景下,程序化的Excel与XML转换能力就显得尤为重要。它能帮助我们告别繁琐的手动操作,实现数据的自动化、批量化处理。
二、 核心工具库安装
安装依赖
npm install xlsx xml2js ts-node typescript @types/node xml-js npm install @types/xml2js @types/xlsx @types/xml-js -D
三、 Excel 转换为 XML
这个过程的核心思想是:读取Excel数据 -> 将数据构造成JavaScript对象 -> 将JavaScript对象转换为XML格式。
3.1 读取Excel数据并转换成Json对象
假设我们有一个名为 users.xlsx 的Excel文件,内容如下:
| id | name | |
|---|---|---|
| 1 | Alice | alice@163.com |
| 2 | Bob | bob@163.com |
| 3 | Charlie | charlie@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];
// 将工作表转换为JSON对象数组
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数据转换为XML
现在我们有了JavaScript对象数组,接下来使用 xml-js 将其转换为XML格式。
import * as convert from 'xml-js';
// 假设 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结果 (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 转换为 Excel
反向操作的思路同样清晰:读取XML数据 -> 将XML解析为JavaScript对象 -> 将JavaScript对象生成为Excel文件。
4.1 读取并解析XML数据
假设我们有上一节生成的 output.xml 文件。
import * as fs from 'fs';
import * as convert from 'xml-js';
// 读取XML文件内容
const xmlFile = fs.readFileSync('output.xml', 'utf8');
// 将XML转换为JavaScript对象
const jsonDataFromXml = convert.xml2js(xmlFile, { compact: true }) as any;
// 提取我们需要的用户数据数组
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数据生成Excel文件
得到JavaScript对象数组后,我们再次请出 xlsx 来完成最后一步。
import * as XLSX from 'xlsx'; // 1. 创建一个新的工作簿 const newWorkbook = XLSX.utils.book_new(); // 2. 将JSON数据转换为工作表 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');
到此这篇关于深入浅出使用JS/TS轻松搞定Excel与XML互转的文章就介绍到这了,更多相关JS Excel与XML互转内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
