使用 JavaScript 实现数据导出为 Excel 和 CSV 文件

在 Web 开发中,经常会遇到需要将数据导出为文件的需求,例如将数据导出为 Excel 或 CSV 文件。今天,我们就来探讨如何使用 JavaScript 实现这一功能。

一、实现思路

我们通过 HTML 创建一个按钮,点击按钮时,触发 JavaScript 函数,将数据转换为 Excel 或 CSV 文件格式,并生成可下载的链接。

效果图:

二、代码实现

  1. HTML 部分
<!DOCTYPE html>
<html><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1"><script src="js/jquery-3.7.1.min.js"></script><title></title><style>.content {width: 300px;display: flex;justify-content: space-around;}.inport {background-color: skyblue;width: 100px;font-weight: 600;font-size: 20px;}.inport:hover {background-color: azure;cursor: pointer;}</style>
</head><body><div class="content"><h1>导出数据:</h1><button class="inport">一键导出</button></div><script>// 具体实现代码在下方</script>
</body></html>

在这个 HTML 结构中,我们定义了一个按钮,用于触发数据导出操作,并设置了相应的样式。

  1. JavaScript 部分
$('.inport').click(function () {// 假设这是从接口获取的数据const jsonData = [{name: '张三',tel: 15836333325,email: '1903333356@qq.com'},{name: '李四',tel: 15833338325,email: '19033333@qq.com'},{name: '测试',tel: 158333333325,email: '测试.com'}];// 导出为Excel文件// 列标题let str = '<tr><td align="center">姓名</td><td>电话</td><td align="center">邮箱</td></tr>';// 循环遍历,每行加入tr标签,每个单元格加td标签for (let i = 0; i < jsonData.length; i++) {str += '<tr>';for (const key in jsonData[i]) {// 增加\t为了不让表格显示科学计数法或者其他格式str += `<td>${jsonData[i][key] + '\t'}</td>`;}str += '</tr>';}const worksheet = 'Sheet1'; // Worksheet名const uri = 'data:application/vnd.ms-excel;base64,';// 输出base64编码const base64 = (s) => window.btoa(unescape(encodeURIComponent(s)));// 下载的表格模板数据const template = `<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv="Conten-Type" content="text/html;charset=utf-8"><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>${worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table cellpadding="100">${str}</table></body></html>`;// 获取当前日期const now = new Date();const year = now.getFullYear();const month = String(now.getMonth() + 1).padStart(2, '0');const day = String(now.getDate()).padStart(2, '0');const dateString = `${year}-${month}-${day}`;const link = document.createElement("a");link.href = uri + base64(template); //下载模板// 添加日期到文件名link.download = `数据表_${dateString}.xls`;link.click();// 导出为CSV文件// 列标题,逗号隔开,每一个逗号就是隔开一个单元格let str = `姓名,电话,邮箱\n`;for (let i = 0; i < jsonData.length; i++) {for (const key in jsonData[i]) {str += `(${jsonData[i][key] + '\t'},`;     // 增加\t为了不让表格显示科学计数法或者其他格式}str += '\n';}const uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str); // encodeURIComponent解决中文乱码const link = document.createElement("a"); // 通过创建a标签实现link.href = uri;// 添加日期到文件名link.download = `json数据表_${dateString}.csv`;link.click();
});

在上述 JavaScript 代码中,我们首先定义了要导出的数据jsonData。然后分别实现了将数据导出为 Excel 和 CSV 文件的功能。

对于 Excel 文件,我们构建了一个 HTML 表格模板,将数据填充到表格中,然后将其转换为 Base64 编码,生成可下载的链接。

对于 CSV 文件,我们将数据按照 CSV 格式拼接成字符串,进行编码后生成可下载的链接。

三、总结

通过以上代码,我们实现了在 Web 页面中点击按钮将数据导出为 Excel 和 CSV 文件的功能。在实际应用中,我们可以根据具体需求对数据格式和文件名称进行调整,以满足不同的业务场景。希望这篇博客对你有所帮助,谢谢阅读!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

青听音乐 1.0.6| 全网音乐免费听,无损下载,4条音源,界面简洁无广告

一款强大的音乐播放器&#xff0c;内部集成了相当丰富的功能&#xff0c;可以一键搜索任何想要的歌曲或歌手专辑&#xff0c;同时还支持下载和收藏&#xff0c;拥有非常流畅的速度&#xff0c;使用起来没有任何限制&#xff01;软件自带有大厂的解析音源&#xff0c;运行非常稳…

动态规划之子序列问题1

以leetcode300题为例 此题最为经典&#xff0c;所有的算法书在讲子序列问题时都以这个为模板题&#xff0c;后面的题可以按照此题的分析方法进行分析 区分子序列和子数组 例如a&#xff0c;b&#xff0c;c&#xff0c;d&#xff0c;e这个数组 子数组是必须连续的&#xff0c;…

android-ndk开发(4): linux开发机有线连接android设备

android-ndk开发(4): linux开发机有线连接android设备 2025/05/05 1. 概要 linux 系统&#xff0c; 例如最常见的 ubuntu&#xff0c; 在通过 USB 线把 android 设备连接到开发机上时&#xff0c; 仅仅是 ”物理上的连接”。 这时候 adb 是无法识别到 android 设备的。 需要…

NOI 2025 大纲更新:算法竞赛的新风向标

《NOI 2025 大纲更新&#xff1a;算法竞赛的新风向标》 在信息学奥林匹克竞赛&#xff08;NOI&#xff09;的赛场上&#xff0c;每一次大纲的更新都如同一场风暴的前奏&#xff0c;它预示着竞赛知识体系的变革&#xff0c;也引领着选手们备战的方向。2025 年的 NOI 大纲已经正…

Spring Boot 集成 Solr 的详细步骤及示例

环境准备 安装 Solr &#xff1a;从 Solr 官网&#xff08;Welcome to Apache Solr - Apache Solr&#xff09;下载并安装最新版本&#xff0c;然后通过命令 bin/solr start 启动 Solr 服务&#xff0c;使用 bin/solr create -c mycore 创建一个新的 Solr 核心。 安装 JDK &am…

【自然语言处理与大模型】LlamaIndex的数据连接器和对话引擎

LlamaIndex 是领先的开发框架&#xff0c;专为结合大型语言模型&#xff08;LLM&#xff09;与个性化工作流打造高效的数据驱动型智能代理而设计。一般我们用它来做RAG检索增强生成。 &#xff08;1&#xff09;RAG的介绍 大型语言模型&#xff08;LLM&#xff09;虽然在海量数…

【实战教程】React Native项目集成Google ML Kit实现离线水表OCR识别

前言 在移动应用开发中&#xff0c;OCR&#xff08;光学字符识别&#xff09;技术广泛应用于各类场景。本文将详细介绍如何在React Native项目中集成Google ML Kit&#xff0c;实现离线水表数字识别功能。全程使用TypeScript&#xff0c;并针对React Native 0.74版本进行适配&a…

全球化电商平台AWS云架构设计

业务需求&#xff1a; 支撑全球三大区域&#xff08;北美/欧洲/亚洲&#xff09;用户访问&#xff0c;延迟<100ms处理每秒50,000订单的峰值流量混合云架构整合本地ERP系统全年可用性99.99%满足GDPR和PCI DSS合规要求 以下是一个体现AWS专家能力的全球化电商平台架构设计方…

jupyter notebook运行简单程序

一. 使用 cmd 创建虚拟环境 1.创建虚拟环境 &#xff08;1&#xff09;创建新的虚拟环境&#xff08;本项目名设置为zhineng&#xff09;&#xff0c;并设置python版本 conda create -n zhineng python3.6 &#xff08;2&#xff09;查看python版本 python --version &am…

【计算机视觉】语义分割:MMSegmentation:OpenMMLab开源语义分割框架实战指南

深度解析MMSegmentation&#xff1a;OpenMMLab开源语义分割框架实战指南 技术架构与设计哲学系统架构概览核心技术特性 环境配置与安装指南硬件配置建议详细安装步骤环境验证 实战全流程解析1. 数据集准备2. 配置文件定制3. 模型训练与优化4. 模型评估与推理 核心功能扩展1. 自…

计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 01.环境搭建

计算机图形学编程(使用OpenGL和C)(第2版) 这是我学习计算机图形学编程(使用OpenGL和C)的笔记&#xff0c;主要记录学习心得及一些学习过程中遇到的问题和解决方案。源代码存放在github上。 参考资料&#xff1a; 原书资源(程序代码、模型、纹理、贴图及图表)下载ShaderToy学习…

代码随想录算法训练营第三十二天

LeetCode/卡码网题目: 518. 零钱兑换 II377. 组合总和 Ⅳ790. 多米诺和托米诺平铺(每日一题)57. 爬楼梯&#xff08;第八期模拟笔试&#xff09; 其他: 今日总结 往期打卡 背包问题特点: 滚动数组背包遍历顺序 完全背包从小到大,即基于当前物品更新过的继续更新01背包从大到…

第十六届蓝桥杯 2025 C/C++组 密密摆放

目录 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 思路&#xff1a; 思路详解: 发个牢骚&#xff1a; 代码&#xff1a; 代码详解&#xff1a; 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; P12337 [蓝桥杯 2025 省 AB/Python B 第二…

分析rand()和srand()函数的功能

rand()和srand()函数原型&#xff1a; int rand(void) 返回一个范围在 0 到 RAND_MAX 之间的伪随机数。 void srand(unsigned int seed)用来给rand() 设置随机数发生器&#xff0c;随机数发生器输出不同的数值&#xff0c;rand() 就会生成不同的随机数 1)、在“D:\Keil_v5\AR…

debuginfo详解

debuginfo 是 Linux 系统中存储调试符号和源代码信息的特殊软件包&#xff0c;用于分析内核或用户态程序的崩溃转储文件&#xff08;如 vmcore、coredump&#xff09;。它在调试复杂问题&#xff08;如内核崩溃、程序段错误&#xff09;时至关重要。以下是其核心作用、安装方法…

Python 爬取微店商品列表接口(item_search)的实战指南

在电商数据分析、市场调研或竞品分析中&#xff0c;获取商品列表信息是常见的需求。微店作为知名的电商平台&#xff0c;提供了丰富的商品资源和相应的 API 接口。本文将详细介绍如何使用 Python 爬虫技术&#xff0c;通过微店的 item_search 接口根据关键词搜索商品列表&#…

【bazel】bazel简介及简单使用

文章目录 1. What is bazel?2. bazel的核心原理2.1 bazel的构建模型2.2 bazel的核心概念2.3 bazel的关键特性 3. bazel的使用3.1 划分项目结构3.2 编写BUILD文件3.3 bazel常用命令3.4 bazel依赖管理 参考内容 1. What is bazel? bazel是一个开源的构建工具&#xff0c;它基于…

【Mytais系列】Myatis的设计模式

目录 设计模式 1. 工厂模式&#xff08;Factory Pattern&#xff09; 2. 建造者模式&#xff08;Builder Pattern&#xff09; 3. 动态代理模式&#xff08;Dynamic Proxy Pattern&#xff09; 4. 模板方法模式&#xff08;Template Method Pattern&#xff09; 5. 策略模…

【unity游戏开发入门到精通——UGUI】Mask组件实现UGUI遮罩

注意&#xff1a;考虑到UGUI的内容比较多&#xff0c;我将UGUI的内容分开&#xff0c;并全部整合放在【unity游戏开发——UGUI】专栏里&#xff0c;感兴趣的小伙伴可以前往逐一查看学习。 文章目录 前言如何实现UI遮罩1、Mask组件2、实例3、注意 专栏推荐完结 前言 Mask遮罩是…

Github2025-05-04php开源项目日报 Top10

根据Github Trendings的统计,今日(2025-05-04统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量PHP项目10Shell项目1Vue项目1Java项目1ASP项目1SecLists - 安全测试人员的伴侣 创建周期:4375 天开发语言:PHP协议类型:MIT LicenseStar数量…