ExcelJS 使用教程 - 强大的 JavaScript Excel 处理库

ExcelJS 使用教程 - 强大的 JavaScript Excel 处理库

【免费下载链接】exceljs 项目地址: https://gitcode.com/gh_mirrors/exc/exceljs

ExcelJS 是一个功能强大的 JavaScript 库,专门用于读取、操作和写入 Excel 电子表格数据,支持 XLSX 和 JSON 格式。它是一个开源项目,旨在提供一个简单而强大的接口来处理电子表格数据。

项目介绍

ExcelJS 是一个跨平台的 Excel 处理库,不仅可以在 Node.js 环境中使用,还支持浏览器环境,使其成为一个非常灵活的工具。它支持丰富的功能,包括单元格样式、公式、图表、图片插入、数据验证等高级功能。

快速开始

安装

通过 npm 安装 ExcelJS:

npm install exceljs 

基本示例

以下是一个简单的示例,展示如何创建一个新的 Excel 文件并添加数据:

const ExcelJS = require('exceljs'); // 创建新工作簿 const workbook = new ExcelJS.Workbook(); // 添加工作表 const worksheet = workbook.addWorksheet('员工数据'); // 添加表头 worksheet.addRow(['ID', '姓名', '邮箱', '部门']); worksheet.addRow([1, '张三', '[email protected]', '技术部']); worksheet.addRow([2, '李四', '[email protected]', '市场部']); worksheet.addRow([3, '王五', '[email protected]', '财务部']); // 设置单元格样式 worksheet.getRow(1).font = { bold: true, color: { argb: 'FF0000FF' } }; worksheet.columns = [ { header: 'ID', key: 'id', width: 10 }, { header: '姓名', key: 'name', width: 20 }, { header: '邮箱', key: 'email', width: 30 }, { header: '部门', key: 'department', width: 15 } ]; // 保存文件 workbook.xlsx.writeFile('员工数据.xlsx') .then(() => { console.log('Excel 文件已保存'); }) .catch((error) => { console.error('保存文件时出错:', error); }); 

核心功能

1. 工作簿操作

ExcelJS 提供了完整的工作簿管理功能:

// 设置工作簿属性 workbook.creator = '系统管理员'; workbook.lastModifiedBy = '自动生成'; workbook.created = new Date(); workbook.modified = new Date(); // 添加多个工作表 const sheet1 = workbook.addWorksheet('销售数据'); const sheet2 = workbook.addWorksheet('库存数据'); const sheet3 = workbook.addWorksheet('财务报表'); 

2. 单元格样式

支持丰富的单元格样式设置:

// 设置字体样式 worksheet.getCell('A1').font = { name: '微软雅黑', family: 2, size: 14, bold: true, color: { argb: 'FFFF0000' } }; // 设置边框 worksheet.getCell('A1').border = { top: { style: 'thin' }, left: { style: 'thin' }, bottom: { style: 'thin' }, right: { style: 'thin' } }; // 设置背景色 worksheet.getCell('A1').fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FFFFFF00' } }; 

3. 数据验证

支持数据验证功能:

worksheet.dataValidation.add('B2:B10', { type: 'list', allowBlank: true, formulae: ['"技术部,市场部,财务部,人事部"'] }); 

4. 公式支持

支持 Excel 公式:

worksheet.getCell('D2').value = { formula: 'SUM(B2:C2)', result: 1500 }; 

高级功能

读取 Excel 文件

const workbook = new ExcelJS.Workbook(); workbook.xlsx.readFile('数据文件.xlsx') .then(() => { const worksheet = workbook.getWorksheet(1); worksheet.eachRow((row, rowNumber) => { console.log(`行 ${rowNumber}:`, row.values); }); }); 

流式处理

对于大型文件,可以使用流式处理:

const workbook = new ExcelJS.stream.xlsx.WorkbookWriter({ filename: '大型数据文件.xlsx' }); const worksheet = workbook.addWorksheet('数据'); // 逐行写入数据 for (let i = 0; i < 100000; i++) { worksheet.addRow([i, `数据${i}`, Math.random() * 100]).commit(); } workbook.commit().then(() => { console.log('文件写入完成'); }); 

应用场景

1. 数据导出

将数据库中的数据导出为 Excel 报表:

async function exportUserData() { const users = await UserModel.findAll(); const workbook = new ExcelJS.Workbook(); const worksheet = workbook.addWorksheet('用户数据'); worksheet.addRow(['用户ID', '用户名', '邮箱', '注册时间']); users.forEach(user => { worksheet.addRow([ user.id, user.username, user.email, user.createdAt ]); }); await workbook.xlsx.writeFile('用户数据导出.xlsx'); } 

2. 模板生成

生成复杂的报表模板:

function generateReportTemplate() { const workbook = new ExcelJS.Workbook(); const worksheet = workbook.addWorksheet('月度报表'); // 设置报表标题 worksheet.mergeCells('A1:D1'); worksheet.getCell('A1').value = '2024年月度销售报表'; worksheet.getCell('A1').font = { size: 16, bold: true }; worksheet.getCell('A1').alignment = { horizontal: 'center' }; // 设置表头 const headers = ['月份', '产品A', '产品B', '总计']; worksheet.addRow(headers); // 设置数据格式 worksheet.getColumn(2).numFmt = '#,##0'; worksheet.getColumn(3).numFmt = '#,##0'; worksheet.getColumn(4).numFmt = '#,##0'; return workbook; } 

最佳实践

1. 错误处理

async function safeExcelOperation() { try { const workbook = new ExcelJS.Workbook(); await workbook.xlsx.readFile('data.xlsx'); // 处理数据 } catch (error) { console.error('Excel 操作失败:', error.message); throw error; } } 

2. 性能优化

对于大数据量处理:

// 使用流式写入 const workbook = new ExcelJS.stream.xlsx.WorkbookWriter({ filename: 'large-data.xlsx', useStyles: true, useSharedStrings: true }); // 分批处理数据 const batchSize = 1000; for (let i = 0; i < totalRecords; i += batchSize) { const batch = records.slice(i, i + batchSize); batch.forEach(record => { worksheet.addRow(record).commit(); }); } 

3. 内存管理

// 及时释放资源 function processLargeFile() { const workbook = new ExcelJS.Workbook(); workbook.xlsx.readFile('large-file.xlsx') .then(() => { // 处理数据 // 完成后手动释放内存 workbook.worksheets.forEach(ws => ws.model = null); }); } 

生态系统集成

ExcelJS 可以与其他流行的 JavaScript 框架集成:

与 Express.js 集成

const express = require('express'); const ExcelJS = require('exceljs'); const app = express(); app.get('/export', async (req, res) => { const workbook = new ExcelJS.Workbook(); const worksheet = workbook.addWorksheet('数据'); worksheet.addRow(['名称', '值']); worksheet.addRow(['项目A', 100]); worksheet.addRow(['项目B', 200]); res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); res.setHeader('Content-Disposition', 'attachment; filename=export.xlsx'); await workbook.xlsx.write(res); res.end(); }); 

与前端框架集成

在浏览器环境中使用:

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/exceljs.min.js"></script> <script> // 浏览器端使用 const workbook = new ExcelJS.Workbook(); const worksheet = workbook.addWorksheet('数据'); worksheet.addRow(['浏览器', '版本', '支持情况']); worksheet.addRow(['Chrome', '90+', '支持']); worksheet.addRow(['Firefox', '88+', '支持']); workbook.xlsx.writeBuffer().then(buffer => { // 创建下载链接 const blob = new Blob([buffer], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'}); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = '浏览器支持情况.xlsx'; a.click(); }); </script> 

总结

ExcelJS 是一个功能全面、性能优异的 Excel 处理库,无论是简单的数据导出还是复杂的报表生成,都能提供强大的支持。其跨平台的特性使得它既可以在服务器端使用,也可以在浏览器端运行,为开发者提供了极大的灵活性。

通过合理的错误处理、性能优化和内存管理,ExcelJS 可以处理各种规模的 Excel 文件,是企业级应用和数据处理工具的理想选择。

【免费下载链接】exceljs 项目地址: https://gitcode.com/gh_mirrors/exc/exceljs

Read more

解决VsCode远程服务器上Copilot无法使用Claude的问题

最近在用vscode中的GitHub copilot,发现无法使用claude系列的模型 很多小伙伴知道要开代理,开往带你以后claude确实会出来,本地使用没有任何问题,但是如果使用远程服务器ssh,claude系列的模型就消失了,参考这篇博客https://blog.ZEEKLOG.net/qq_40620465/article/details/152000104 按照博主的方法,需要加一个改动,在设置远程服务器(注意不是“用户”)的setting.json时需要加入"http.useLocalProxyConfiguration": true, 完成后再重启vscode,claude就有了:

By Ne0inhk

Whisper-WebUI语音转文字实战指南:从零开始制作专业字幕

Whisper-WebUI语音转文字实战指南:从零开始制作专业字幕 【免费下载链接】Whisper-WebUI 项目地址: https://gitcode.com/gh_mirrors/wh/Whisper-WebUI 你是不是经常遇到这样的困扰:录制的视频需要添加字幕,但手动打字太耗时?或者想为海外视频制作中文翻译字幕,却苦于找不到合适的工具?今天我要向你推荐一个神器——Whisper-WebUI,它能帮你把语音变成文字,让字幕制作变得轻松简单! 🤔 第一步:如何快速搭建语音转文字环境? 问题场景:想用AI工具但怕配置太复杂 解决方案:Docker一键部署(5分钟搞定) 别被"语音识别"、"AI模型"这些词吓到,其实安装比你想的简单得多。就像下载手机APP一样,跟着我做: 1. 开始使用: 打开浏览器访问 http://localhost:7860,就这么简单! 启动服务: cd Whisper-WebUI &

By Ne0inhk

Whisper-large-v3多任务并行:同一服务同时运行转录/翻译/摘要三模式

Whisper-large-v3多任务并行:同一服务同时运行转录/翻译/摘要三模式 基于 OpenAI Whisper Large v3 构建的多语言语音识别 Web 服务,支持 99 种语言自动检测,可同时运行转录、翻译和摘要三种处理模式。 1. 项目概述与核心价值 Whisper-large-v3 是 OpenAI 推出的强大语音识别模型,拥有 15 亿参数,支持 99 种语言的自动检测与转录。本项目基于该模型二次开发,构建了一个支持多任务并行的 Web 服务,可以在同一服务中同时处理语音转录、文本翻译和内容摘要三种任务。 传统语音识别服务的痛点: * 需要部署多个服务处理不同任务 * 数据在不同系统间流转效率低 * 维护成本高,资源利用率低 本方案的创新价值: * 单服务集成三大核心功能 * 减少数据传输开销,提升处理效率 * 统一接口简化开发集成 * 最大化利用 GPU 资源 通过这个方案,你可以用一段音频输入,

By Ne0inhk

5分钟部署Z-Image-Turbo,AI绘画极速上手实战

5分钟部署Z-Image-Turbo,AI绘画极速上手实战 你有没有试过:输入一句“秋日银杏大道上的咖啡馆橱窗”,等了七八秒,结果生成的图里银杏叶子泛着塑料感,咖啡馆玻璃反光像马赛克?又或者,想给团队快速出几版海报方案,却卡在模型加载、依赖报错、显存溢出的死循环里? Z-Image-Turbo不是又一个“参数更多、体积更大”的AI绘画模型。它是一次精准的工程减法——去掉冗余步骤,保留核心能力,把文生图从“能画”真正拉回到“马上就能用”的节奏里。 它不挑硬件:RTX 3090、4080、甚至A10G这类16GB显存的消费级或入门级专业卡,开箱即跑; 它不绕弯路:8步完成高质量图像生成,端到端延迟压进1秒内; 它不玩翻译游戏:中文提示词直通语义空间,“穿青花瓷纹旗袍的少女坐在苏州园林月洞门下”——字字落地,不丢细节; 它不设门槛:没有conda环境冲突,没有模型手动下载,没有CUDA版本焦虑。 本文带你跳过所有理论铺垫和配置踩坑,用最短路径完成本地部署、界面访问、首图生成、效果调优。全程无需写一行新代码,不联网下载权重,

By Ne0inhk