当前位置: 首页 > news >正文

自封装|数据导出组件,表格数据导出为excel文件,可实现导表头替换,自适应单元格宽度(个人学习记录)

依赖插件:

npm install xlsx

代码主体:

import XLSX from 'xlsx' export function exportExcel(exportData, headerMapping, fileName) { // 转换数据并替换表头 const transformedData = exportData.map((row) => { const newRow = {} for (const key in row) { newRow[headerMapping[key] || key] = row[key] // 使用映射或保留原键 } return newRow }) // 获取第一行的表头(已转换为中文或保留原键) const headers = Object.keys(transformedData[0] || {}) // 创建工作表并添加表头和数据 const worksheet = XLSX.utils.aoa_to_sheet([ headers, ...transformedData.map((row) => Object.values(row)) ]) // 定义一个函数来计算列宽并设置到工作表上 function setColumnWidths(worksheet) { const range = XLSX.utils.decode_range(worksheet['!ref']) // 获取工作表范围 const colWidths = [] // 初始化列宽数组 for (let col = range.s.c; col <= range.e.c; ++col) { let maxLen = 0 for (let row = range.s.r; row <= range.e.r; ++row) { const cellAddress = XLSX.utils.encode_cell({ c: col, r: row }) // 获取单元格地址 const cell = worksheet[cellAddress] if (cell && cell.v != null) { const text = String(cell.v) // 将单元格内容转换为字符串 const textLen = text.length if (textLen > maxLen) { maxLen = textLen } } } colWidths.push({ wch: Math.max(maxLen * 1.6, 15) }) // 添加列宽(最小宽度为15) } worksheet['!cols'] = colWidths // 设置列宽 } // 自动调整所有列的宽度 setColumnWidths(worksheet) // 设置单元格内容居中对齐 const range = XLSX.utils.decode_range(worksheet['!ref']) for (let row = range.s.r; row <= range.e.r; row++) { for (let col = range.s.c; col <= range.e.c; col++) { const cellAddress = XLSX.utils.encode_cell({ c: col, r: row }) const cell = worksheet[cellAddress] if (cell) { cell.s = cell.s || {} cell.s.alignment = cell.s.alignment || {} cell.s.alignment.horizontal = 'center' cell.s.alignment.vertical = 'center' } } } // 创建一个新的工作簿并将工作表添加到工作簿中 const workbook = XLSX.utils.book_new() XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1') // 生成Excel文件并触发下载 XLSX.writeFile(workbook, fileName + '.xlsx') }

调用方式:

exportExcel( const time = new Date() <表格数据>.map((item) => { return { // 筛选数据 可在此处处理数据 进行排序 1: <第一列数据字段>, 2: <第二列数据字段>, } }), { // 表头映射 1: <第一列对应表头>, 2: <第二列对应表头>, }, `<导出文件名>${time.getFullYear()}-${time.getMonth() + 1}-${time.getDate()}` )
http://www.jsqmd.com/news/527727/

相关文章:

  • ncmdump终极指南:3分钟掌握网易云音乐NCM格式快速转换技巧
  • 避坑指南:华为HCIA考试中最容易混淆的5个网络概念(含MAC地址查询技巧)
  • 突破阅读边界:Tomato-Novel-Downloader打造无缝离线阅读体验
  • 2026年3月花岗岩石材厂家最新推荐:蒙古黑花岗岩、芝麻黑火烧板、中国黑石材、黄金麻板材、路沿石厂家选择指南 - 海棠依旧大
  • LoRA微调终极指南:如何用闻达提升知识库回答准确性
  • Qwen3最新模型YOLOv11联动实践:视频物体追踪与动态字幕生成
  • 2026年空心杯电机厂家推荐:机器人灵巧手与自动化设备高精度动力源头选择 - 十大品牌推荐
  • JavaScript实现丹青识画实时影像上传与预览功能
  • 从面试复盘到蜕变:测试工程师如何赢得心仪Offer?
  • AlienFX-Tools 完整指南:开源硬件控制解决方案深度解析
  • 猫抓视频嗅探工具:三秒破解网页视频下载难题
  • 算法 正则表达式 异常
  • Windows驱动管理终极指南:Driver Store Explorer帮你彻底清理系统垃圾
  • 2026年江苏探伤机配件厂家盘点,好用的品牌有哪些 - 工业设备
  • NFS vs CIFS终极对比:Linux系统管理员该选哪个?附性能测试数据
  • Papermill与Docker集成:5个步骤构建容器化Notebook执行环境终极指南
  • 霜儿-汉服-造相Z-Turbo效果展示:高清汉服人像作品集锦
  • 分析江苏探伤机厂商,哪家口碑好值得推荐? - 工业品牌热点
  • OpenClaw常见安装问题排查:Qwen3-32B镜像对接失败解决方案
  • Python百度搜索API:无需密钥的零配置搜索集成方案
  • Nginx限速实战:手把手教你用limit_req模块防刷接口(附常见配置误区解析)
  • 终极性能优化指南:如何让go-sqlmock数据库测试速度提升300%
  • osgearth 实现简单的雷达扫描
  • MelonLoader:跨后端Unity游戏模组加载的技术解决方案
  • 2026 四川奢侈品回收与白银回收怎么选|本地正规机构综合参考 - 深度智识库
  • Goth安全最佳实践:防止CSRF攻击的5个关键步骤终极指南
  • SDXL 1.0电影级绘图工坊应用案例:制作个性化节日祝福图片
  • DeepSeek-R1-Distill-Qwen-1.5B工业落地案例:RK3588板卡实测解析
  • 企业网安必修课:联软数据交换系统漏洞排查与应急响应指南
  • Jupyter Notebook中%autoreload 2报错排查与高效调试技巧