提高数据处理效率:JavaScript 操作 XLSX 文件的最佳实践

前言

Excel 文件(通常以 .xlsx 为后缀)在各种业务场景中都有广泛应用,如数据分析、财务报告和其他数据表单处理。掌握如何在前端或后端使用 JavaScript 对这些 Excel 文件进行读取、创建和修改,能够显著提升我们的开发效率和数据处理能力。
本文将深入探讨如何使用强大的 xlsx 库来操作 Excel 文件。我们将涵盖如何在 Node.js 和浏览器环境中读取 Excel 文件、创建新的 Excel 文件、修改现有的 Excel 文件以及处理复杂的 Excel 数据结构。

常用操作

读取 Excel 文件

在 Node.js 环境中读取本地文件

在 Node.js 环境中,我们可以轻松地读取本地的 Excel 文件。以下示例展示了如何读取本地的 example.xlsx 文件并将其内容转换为 JSON 格式:

const XLSX = require('xlsx');
const workbook = XLSX.readFile('example.xlsx');// 获取第一个工作表
const sheetName = workbook.SheetNames[0];
const worksheet = workbook.Sheets[sheetName];// 将工作表转换为 JSON 数据
const data = XLSX.utils.sheet_to_json(worksheet);console.log(data);

在浏览器环境中读取用户上传的文件

在浏览器环境中,处理用户上传的文件是常见需求。以下示例展示了如何结合 HTML 的

<input type="file"> 元素读取用户上传的 Excel 文件:
<input type="file" id="upload" accept=".xlsx" /><script>
document.getElementById('upload').addEventListener('change', handleFile, false);function handleFile(event) {const file = event.target.files[0];const reader = new FileReader();reader.onload = function(e) {const data = new Uint8Array(e.target.result);const workbook = XLSX.read(data, { type: 'array' });const sheetName = workbook.SheetNames[0];const worksheet = workbook.Sheets[sheetName];const jsonData = XLSX.utils.sheet_to_json(worksheet);console.log(jsonData);};reader.readAsArrayBuffer(file);
}
</script>

创建 Excel 文件

创建并下载新的 Excel 文件是另一个常见需求。以下示例展示了如何生成包含示例数据的 Excel 文件,并允许用户下载:

<button id="download">下载 Excel 文件</button><script>
document.getElementById('download').addEventListener('click', function() {// 创建数据const data = [{ "Name": "John", "Age": 30, "City": "New York" },{ "Name": "Peter", "Age": 25, "City": "London" },{ "Name": "Sara", "Age": 22, "City": "Paris" }];// 将数据转换为工作表const worksheet = XLSX.utils.json_to_sheet(data);// 创建工作簿并添加工作表const workbook = XLSX.utils.book_new();XLSX.utils.book_append_sheet(workbook, worksheet, "Sheet1");// 生成 Excel 文件并下载XLSX.writeFile(workbook, 'example.xlsx');
});
</script>

修改 Excel 文件

修改现有的 Excel 文件也是常见的操作需求。以下示例展示了如何读取 Excel 文件、修改某个单元格的值并保存修改后的文件:

const XLSX = require('xlsx');
const workbook = XLSX.readFile('example.xlsx');const sheetName = workbook.SheetNames[0];
const worksheet = workbook.Sheets[sheetName];// 修改单元格 A1 的值
worksheet['A1'].v = 'Modified Value';// 保存修改后的文件
XLSX.writeFile(workbook, 'modified_example.xlsx');

进阶操作

1. 处理多个工作表

如果 Excel 文件包含多个工作表,我们可以遍历所有工作表并处理每个工作表的数据:

const XLSX = require('xlsx');
const workbook = XLSX.readFile('example.xlsx');// 遍历所有工作表
workbook.SheetNames.forEach(sheetName => {const worksheet = workbook.Sheets[sheetName];const data = XLSX.utils.sheet_to_json(worksheet);console.log(Sheet: ${sheetName}, data);
});

2. 处理复杂的数据结构

处理嵌套的表格或进行数据清洗需要使用 JavaScript 的数组和对象方法:

const XLSX = require('xlsx');
const workbook = XLSX.readFile('complex_example.xlsx');const sheetName = workbook.SheetNames[0];
const worksheet = workbook.Sheets[sheetName];// 将工作表转换为 JSON 数据
const data = XLSX.utils.sheet_to_json(worksheet);// 清洗数据,去除空值并计算某一列的总和
const cleanedData = data.filter(row => row['Value'] !== null && row['Value'] !== undefined);
const totalValue = cleanedData.reduce((sum, row) => sum + row['Value'], 0);console.log('Cleaned Data:', cleanedData);
console.log('Total Value:', totalValue);

3. 指定单元格格式

const XLSX = require('xlsx');
const data = [{ "Date": new Date(), "Amount": 123.45 }
];const worksheet = XLSX.utils.json_to_sheet(data);
worksheet['A1'].z = 'mm/dd/yyyy'; // 指定日期格式
worksheet['B1'].z = '#,##0.00';  // 指定数字格式const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, "Sheet1");
XLSX.writeFile(workbook, 'formatted_example.xlsx');

4. 合并单元格

const XLSX = require('xlsx');
const workbook = XLSX.utils.book_new();
const worksheet = XLSX.utils.aoa_to_sheet([['Title1', null, 'Title2'],['Data1', 'Data2', 'Data3']
]);// 合并单元格 A1 和 B1
worksheet['!merges'] = [{ s: { r: 0, c: 0 }, e: { r: 0, c: 1 } } // s 是开始单元格,e 是结束单元格
];XLSX.utils.book_append_sheet(workbook, worksheet, "Sheet1");
XLSX.writeFile(workbook, 'merged_cells_example.xlsx');

5. 设置单元格样式

虽然 xlsx 库本身对样式支持有限,但可以借助 exceljs 库来实现更丰富的样式设置:

const ExcelJS = require('exceljs');
const workbook = new ExcelJS.Workbook();
const worksheet = workbook.addWorksheet('Sheet1');worksheet.columns = [{ header: 'Name', key: 'name' },{ header: 'Age', key: 'age' },{ header: 'City', key: 'city' }
];worksheet.addRow({ name: 'John', age: 30, city: 'New York' });// 设置列宽和单元格样式
worksheet.getColumn('name').width = 20;
worksheet.getRow(1).font = { bold: true };
worksheet.getCell('A2').fill = {type: 'pattern',pattern: 'solid',fgColor: { argb: 'FFFF0000' }
};workbook.xlsx.writeFile('styled_example.xlsx');

总结

本文详细介绍了如何使用 JavaScript 操作 XLSX 文件,涵盖读取、创建和修改文件的基本操作以及处理复杂数据和应用常用技巧。通过灵活运用 xlsx 库,开发者可以在前端和后端环境中高效地处理 Excel 文件,从而提升数据处理和分析的效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/16149.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习神经网络热点全解:原理精析与丰富应用场景大揭秘

深度学习神经网络是人工智能领域的重要研究方向&#xff0c;以下是一些热点方向及其原理和具体应用场景&#xff1a; 这些深度学习神经网络的热点领域不断推动着人工智能技术的发展和创新&#xff0c;在各个行业和领域展现出了巨大的应用潜力&#xff0c;同时也面临着一些技术挑…

越南很火的slots游戏投放Google谷歌广告策略

越南很火的slots游戏投放Google谷歌广告策略 越南的slot游戏市场正在借助Google广告代投策略推动增长。随着智能手机的普及和互联网的普及&#xff0c;越南的游戏市场迅速增长&#xff0c;吸引了越来越多的投资者和开发者进入该市场。 在这个竞争激烈的市场中&#xff0c;广告…

构建安全的数据库环境:群晖NAS安装MySQL和phpMyAdmin详细步骤

文章目录 前言1. 安装MySQL2. 安装phpMyAdmin3. 修改User表4. 本地测试连接MySQL5. 安装cpolar内网穿透6. 配置MySQL公网访问地址7. 配置MySQL固定公网地址8. 配置phpMyAdmin公网地址9. 配置phpmyadmin固定公网地址 前言 本文将详细讲解如何在群晖NAS上安装MySQL及其数据库管理…

多边形Newell向量

多边形Newell向量 空间平面多边形的Newell向量可以用来表示一个该多边形所在平面的法向量而且 Newell向量的模是这个多边形的面积。 Code 计算多边形的法向量和中心点。 template<typename T> void PolygonTriangulation::ComputePolygonPlane(const TArray<TVect…

【9687】基于springboot+vue的在线考试系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取免费源码 项目描述 21世纪&#xff0c;我国就已普及互联网信息&#x…

出行如何用远程控制软件实现异地办公?

远程办公软件让你轻松享受假期&#xff01; 想象一下&#xff0c;像类似于国庆长假里&#xff0c;你在海边享受着悠闲时光&#xff0c;突然工作上有点急事需要处理。这时&#xff0c;如果你有一款好用的远程办公软件&#xff0c;一切就变得轻松多了。今天&#xff0c;我们就来…

力扣-Mysql-3252-英超积分榜排名 II(中等)

一、题目来源 3252. 英超积分榜排名 II - 力扣&#xff08;LeetCode&#xff09; 二、数据表结构 表&#xff1a;TeamStats --------------------------- | Column Name | Type | --------------------------- | team_id | int | | team_name | v…

用Python设置PowerPoint幻灯片背景

使用Python自动化处理Office文档&#xff0c;如PowerPoint演示文稿&#xff0c;是提高效率和创造力的重要手段。设置PowerPoint幻灯片背景不仅能够增强演示文稿的视觉吸引力&#xff0c;还能帮助传达特定的情感或信息&#xff0c;使观众更加投入。通过编程方式批量修改幻灯片背…

商业物联网详细指南:优势与挑战

物联网是信息技术行业最具前景的领域之一。为什么它如此热门呢&#xff1f;原因在于全球连接性。设备可以像人群一样相互协作。正如我们所知&#xff0c;协作能显著提高生产力。 物联网对普通用户和企业都有益处。许多日常流程可以通过传感器、扫描仪、摄像头和其他设备实现自…

国际专线网络:助力企业全球化转型的关键技术

随着全球经济一体化进程的加速&#xff0c;企业的业务和市场拓展逐渐跨越国界&#xff0c;国际化发展成为企业提高竞争力、拓展业务的重要战略。然而&#xff0c;在跨国运营中&#xff0c;如何确保信息传输的效率、稳定性与安全性&#xff0c;成为企业面临的一大挑战。传统的公…

C2工具vshell最新4.9.3版下载(带永久license)

简介 vshell 是一款安全对抗模拟、红队工具。提供隧道代理和隐蔽通道&#xff0c;模拟长期潜伏攻击者的策略和技术。vshell 为您提供隧道代理和隐蔽通道&#xff0c;以模拟网络中的持久化攻击行为。支持多种协议、高兼容性、及强大的协作能力&#xff0c;帮助蓝队更好的评估安…

你觉得应该怎样阅读文献?

阅读文献这件小事儿&#xff0c;说简单也简单&#xff0c;说复杂也挺烧脑的。我个人觉得&#xff0c;要想把这事儿做得游刃有余&#xff0c;得有点儿“代入感”和“侦探精神”才行。 首先&#xff0c;别把文献当敌人&#xff0c;把它看成是一位智者&#xff0c;它有很多故事和…

云消息队列演进与AI赋能

大家好&#xff0c;我是袁庭新。 常用的消息队列产品有RocketMQ、Kafka、RabbitMQ、MQTT等&#xff0c;现都已实现Serverless化&#xff0c;支持自适应弹性&#xff0c;能够秒级扩展以满足业务流量的变化。这个模块来介绍下云消息队列演进与AI赋能&#xff0c;如何面向企业提供…

什么是MedGraphRAG?一文解读MedGraphRAG原理、现状、展望

MedGraphRAG 是一个专门为医学领域设计的检索增强生成&#xff08;RAG, Retrieval-Augmented Generation&#xff09;框架&#xff0c;它结合了知识图谱和大规模语言模型的优势&#xff0c;旨在提高医学信息生成的准确性、相关性和可解释性。以下是对 MedGraphRAG 的详细介绍&…

【进程概念精讲】

Susan,在那命运月台前面&#xff0c;再上车&#xff0c;春天开始落叶.................................................................. 文章目录 前言 一、【认识进程】 1、【进程基本概念引入】 2、【进程的描述与组织——进程控制块&#xff08;PCB&#xff09;与进程…

Timeline动画「硬切」的问题

1&#xff09;Timeline动画「硬切」的问题 2&#xff09;移动平台纹理压缩格式选择ASTC&#xff0c;美术出图还需遵守POT吗 3&#xff09;如何去掉DOTS Unity.Entities.Graphics创建的BatchRendererGroup的UI相机回调 4&#xff09;Timeline播放动画会产生位移的问题 这是第409…

Django 2024全栈开发指南(三):数据库模型与ORM操作(上篇)

目录 一、模型的定义二、数据迁移三、数据表关系四、数据表操作4.1 Shell工具4.2 数据新增4.3 数据修改4.4 数据删除4.5 数据查询 Django 对各种数据库提供了很好的支持&#xff0c;包括 PostgreSQL、MySQL、SQLite 和 Oracle&#xff0c;而且为这些数据库提供了统一的 API 方法…

第T7周:Tensorflow实现咖啡豆识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标 具体实现 &#xff08;一&#xff09;环境 语言环境&#xff1a;Python 3.10 编 译 器: PyCharm 框 架: &#xff08;二&#xff09;具体步骤 1. 使…

10多条视频涨70万粉,AI猫猫视频实战教程,一篇文章教会你

本文背景 “每个爆款出现的背后&#xff0c;都有一个先驱会倒下。”爆款作者可能不会告诉你的原因是“其实我也是通过XX视频的灵感,突然创作的” 先看看案例&#xff0c;这个账号1月20号注册&#xff0c;只发了10多个视频&#xff0c;居然涨粉70万。 抖音上也有类似博主靠这个方…

超全大模型常见面试题(附答案)

大模型相关的面试问题通常涉及模型的原理、应用、优化以及面试者对于该领域的理解和经验。以下是一些常见的大模型面试问题以及建议的回答方式&#xff1a; 请简述什么是大模型&#xff0c;以及它与传统模型的主要区别是什么&#xff1f; 回答&#xff1a;大模型通常指的是参…