微信小程序/H5(UniApp)导入/导出excel文件

微信小程序导出Excel文件 依然是后端提供Excel文件流,前端做导出。 阅读详情
AI摘要

本文介绍了如何在微信小程序和H5环境中使用XLSX.JS库进行Excel文件的本地读取与导出。首先,需要下载并引入XLSX.JS库,然后分别展示H5(如Uniapp)和小程序中选取文件并获取二进制数据的方法。接着,将二进制数据转换为JSON格式,最后演示了如何构建Excel数据并在两端实现文件导出。

准备工作

JS库

XLSX.JS
链接:https://github.com/SheetJS/sheetjs
下载dist目录下的xlsx.mini.min.js即可(根据开发需求可下载其他版本)

mini版本只支持xlsx不支持xls哦,需要支持xls的话要下载完整版。

Uniapp可以将js文件放在@/common/js/目录下

本地导入并读取Excel(*.xls, *.xlsx)

Excel文件示例

日期事项支出
2023-01-01吃饭300.00
2023-01-02喝奶茶28.00
2023-01-03地铁2.00

选取文件并获得binary数据

H5端(Uniapp)选取文件并获得binary数据

uni.chooseFile({
	count: 1,
	extension: ['.xls', '.xlsx'],
	success: res => {
		let reader = new FileReader();
		reader.onload = e => {
			const data = e.target.result
			process(data) // data为binary数据
		};
		reader.readAsBinaryString(res.tempFiles[0]);
	}
})

小程序端选取文件并获得binary数据

wx.chooseMessageFile({
	count: 1,
	type: 'file',
	extension: ['.xls', '.xlsx'],
	success: res => {
		try {
			const path = res.tempFiles[0].path
			const fs = wx.getFileSystemManager()
			const data = fs.readFileSync(path, 'binary') // data为binary数据
			process(data)
		} catch (e) {
			console.error(e)
			uni.showModal({
				title: '提示',
				content: "文件读取失败",
				showCancel: false
			})
			return
		}
	}
})

Binary数据转json

import XLSX from '@/common/js/xlsx.0.19.2.mini.min.js'
function process(data){
	let workbook = XLSX.read(data, {
		type: "binary"
	});
	const sheetName = workbook.SheetNames[0]
	let sheet = workbook.Sheets[sheetName]
	const options = {
		raw: false // 如果不加raw:true的话日期会被读成数字,根据开发需求决定
	}
	const rawData = XLSX.utils.sheet_to_json(sheet, options);
	// do something
}

此处得到的rawData结构为:

[
	{
		"日期": "2023-01-01",
		"事项": "吃饭",
		"支出": 300.00
	},
	{
		"日期": "2023-01-02",
		"事项": "喝奶茶",
		"支出": 28.00
	},
	{
		"日期": "2023-01-03",
		"事项": "地铁",
		"支出": 2.00
	}
]

本地构建并下载Excel

数据准备

为了对齐数据采用二维数组格式

const data = [
	[
		'日期',
		'事项',
		'支出'
	], 
	...Object.values(json_data)
]

workbook构建

const worksheet = XLSX.utils.aoa_to_sheet(data);
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, '导出');

H5端(Uniapp)导出文件

XLSX.writeFile(workbook, '导出.xlsx');

小程序端导出文件

const fileData = XLSX.write(workbook, {
	bookType: "xlsx",
	type: 'base64'
});
const filePath = `${wx.env.USER_DATA_PATH}/导出.xlsx` // 文件名对应表名,多个表的情况可以自己测试
const fs = wx.getFileSystemManager()
fs.writeFile({
	filePath: filePath,
	data: fileData,
	encoding: 'base64',
	success: res => {
		console.log(res)
		const sysInfo = wx.getSystemInfoSync()
		if (sysInfo.platform.toLowerCase().indexOf('windows') >= 0) {
			wx.saveFileToDisk({
				filePath: filePath,
				success: console.log,
				fail: console.error
			})
		} else {
			wx.openDocument({
				filePath: filePath,
				showMenu: true, // 需要添加showMenu允许用户导出
				success: console.log,
				fail: console.error
			})
		}
	},
	fail: e => {
		console.error(e)
		if (e.errMsg.indexOf('locked')) {
			wx.showModal({
				title: '提示',
				content: '文档已打开,请先关闭',
			})
		}
	}
})

参考

  1. SheetJS CE Docs
  2. 小程序纯前端将数据导出为excel表格
【微信小程序】导出 Excel 报表并分享,使用xlsx库生成 Excel,使用echars插入图表、使用pdfmake导出为PDF文件 请注意,上述示例代码仅供参考,具体的实现方式可能需要根据你的实际需求进行调整。另外,小程序可能对文件系统的操作有限制,可能无法直接保存和分享 PDF 文件,你可能需要根据实际情况进行调整。在回调函数中,可以对生成的 PDF Blob 对象进行进一步的操作,比如保存到本地或分享。然后,将这些数据组装成一个对象,包含了图表的配置信息。请注意,上述示例代码仅供参考,具体的实现方式可能需要根据你的实际需求进行调整。请注意,上述示例代码仅供参考,具体的实现方式可能需要根据你的实际需求进行调整。 阅读详情

相关推荐

uniapp微信小程序使用webview嵌套h5的文件下载问题

公司有个小程序项目,就是单纯的小程序中使用web-view嵌套h5的项目。但是在文件下载的时候,安卓手机点击没反应,ios能打开文件但是都是乱码。 在网上也找了很久,后来确定了一种思路,通过判断当前的宿主环境来进行不同的操作,然后在h5中跳转到小程序的特定页面,并且将文件资源的URL传递过去。之后在小程序中调用微信的下载文件或者保存文件API。 总体思路就是这样,上代码。 h5端代码 // 判断所在环境 var ua = window.navigator.userAgent.toLowerCase

qq_37622750的博客 1万+

uniapp app端导出excel的探索和实现

使用uniapp生成excel并写入appdocuments目录下,在此基础上修改部分源码,来更改excel单元格样式

weixin_54858833的博客 1万+

UniApp跨平台文件下载全攻略:从Blob原理到多端兼容实现

文件下载是Web和移动开发中的基础功能,其核心原理涉及二进制数据处理。Blob(Binary Large Object)作为浏览器和WebView中表示二进制数据的关键对象,充当了数据从服务器传输到客户端的“集装箱”。通过URL.createObjectURL方法,可以将内存中的Blob转换为可访问的临时链接,这是前端触发文件下载的技术基础。然而,不同运行环境对文件系统的访问权限存在巨大差异,这直接影响了下载功能的实现方式。在工程实践中,纯H5环境受限于浏览器沙盒,需通过模拟点击触发下载;而UniApp A

weixin_30628801的博客 399

在uni-app中导出excel文件

{content: '列名1',color: 'blue',type: 'text',width: this.warr[0],height: '25px',fontSize: '16px'},{content: '列名2',color: 'blue',type: 'text',width: this.warr[1],height: '25px',fontSize: '16px'},

宣晨光 3305

UniApp中利用xe-upload打造高效多类型文件上传组件

本文详细介绍了如何在UniApp中使用xe-upload组件实现高效多类型文件上传功能。通过原生支持图片、视频、文档等多种格式,以及与uni.uploadFile API的深度整合,xe-upload显著简化了跨平台文件上传的开发流程。文章涵盖从基础集成到深度定制的全流程实践,包括性能优化、特殊场景适配及常见问题解决方案,帮助开发者快速构建企业级文件上传功能。

weixin_29263201的博客 116

SpringBoot+uniapp+微信小程序的农产品质量追溯系统实战

在数字化农业与智慧农业快速发展的背景下,农产品质量追溯系统成为保障食品安全、增强消费者信任的关键基础设施。这类系统的核心在于打通从田间到餐桌的全链路数据,涉及二维码防伪、多端协同、数据可信度保障等核心技术问题。SpringBoot作为成熟的Java后端框架,能够高效承载业务逻辑与接口服务;uniapp凭借跨端编译能力,实现小程序、H5等多平台复用;微信小程序则提供轻量化的扫码入口,满足消费者即用即走的使用习惯。通过批次管理、农事记录、检测报告等模块的联动,结合HMAC签名防伪与Redis缓存优化,系统在保障

weixin_33563728的博客 303

Uniapp H5导出Excel

客户端 兼容性 H5 √ iOSApp × Android App × 微信小程序 × 安装vue-json-excel插件 npm install vue-json-excel 在main.js文件里加入 import JsonExcel from 'vue-json-excel' Vue.component('downloadE...

ASP.NET 2415

uniapp考试小程序:本地判分+随机组卷+跨端Excel导出

考试小程序是教育类轻应用的核心场景,其本质是围绕题库管理、状态控制与结果反馈构建的闭环系统。基于Vue 3和Pinia的状态驱动架构,uni-app凭借条件编译与跨端API抽象能力,成为实现H5/小程序/App三端统一逻辑的理想框架。本文聚焦‘本地化’技术路径——题库JSON静态托管、Fisher-Yates随机组卷、Date.now()精准倒计时、100%前端判分引擎及SheetJS mini版跨端Excel生成,规避服务端依赖与平台绑定。适用于高校随堂测验、继续教育结业考等需快速交付、离线可用、数据自主

weixin_29628635的博客 183

uniapp开发H5使用formData上传文件

由于uniapp 的 uni.uploadFile 上传的限制,无法实现上传excel、world、ppt等类型的文件,不支持下图的上传方式,故只能调用原生的方法来解决。

明月几时有?把酒问青天。不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间。转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。 但愿人长久,千里共婵娟。 4801

Spring Boot+uniapp校园快递平台实战指南

校园快递平台是典型的轻量级业务系统,其核心在于高可用、强一致与多端协同。基于Spring Boot可快速构建具备ACID事务保障的后端服务,确保取件-开柜-扣费链路原子性;uniapp则通过一次开发、多端编译能力,统一支撑微信小程序、H5及App,显著降低高校团队的跨端维护成本。技术价值体现在‘快、准、稳’:扫码3秒响应、取件码5分钟失效、异常订单自动复核。典型应用场景覆盖大学宿舍楼快递代取、柜机状态实时同步、角色化权限管控(学生/宿管/快递员)及后勤数据看板。本文聚焦真实落地项目中的架构分层、MQTT柜机

weixin_34032621的博客 498

实体门店会员系统四件套:小程序+H5+API+后台实战指南

会员系统是实体零售数字化运营的核心基础设施,其本质是围绕‘人-卡-券-核销’构建可落地的业务闭环。技术选型需兼顾低门槛、高可用与强扩展性:微信小程序提供即用流量入口,H5补足跨平台触达能力,后端API承载高并发交易逻辑,管理后台则聚焦店长级操作友好性。本文基于Vue3+UniApp+Spring Boot 3.x+Element Plus技术栈,深入解析双端统一开发避坑、分布式幂等设计、Redis锁与数据库行锁协同、状态机驱动等级变更、以及面向非技术人员的交互优化等关键实践,覆盖奶茶店、美甲店、社区生鲜等真

weixin_29001419的博客 5

微信小程序的uniapp校园活动报名管理系统设计与实现

若需独立后端,需设计RESTful API接口规范,定义用户、活动、报名等数据表的字段及关联关系。后端开发:基于Spring Boot/flask/django/Thinkphp-Laravel框架和Java语言实现后端服务,处理业务逻辑和数据库交互。(1) Spring Boot/flask/django/Thinkphp-Laravel:作为后端开发框架,实现API接口、用户管理等。小程序框架uni-app:使用Vue.js开发跨平台应用的前端框架,编写一套代码,可编译到Android、小程序等平台。

鹏飞的博客 708

Spring Boot+uniapp公考学习平台源码部署与二次开发全攻略

前后端分离架构已成为企业级应用的主流,Spring Boot负责后端接口与业务逻辑,uniapp则通过一套代码编译到微信小程序、App和H5,两者结合能高效构建跨端业务系统。在在线教育场景中,公考学习平台涉及题库管理、考试计时、多端同步等复杂需求,其源码的部署与定制不仅是环境配置问题,更涵盖数据库初始化、接口联调、小程序打包及数据链路改造。本文从源码目录结构、Spring Boot后端启动、uniapp前端编译,到微信小程序打包、题库替换,系统梳理了完整实践路径,帮助开发者快速掌握这套技术组合的落地方法,降

weixin_33462927的博客 335

FastAdmin+ThinkPHP+UniApp教培小程序开发实战

轻量级服务型小程序是中小教育机构数字化落地的核心载体,其本质是基于标准化前后端架构实现快速交付的MVP系统。FastAdmin作为后台生成器大幅降低CRUD开发成本,ThinkPHP提供稳定可靠的业务逻辑支撑,UniApp则保障多端一致性和微信生态兼容性。三者协同解决了教培场景中课程管理、学员运营、微信支付、权限隔离等高频需求,同时支持家政、宠物、社区团购等业务复用。本文聚焦真实部署中的PHP版本兼容性陷阱、UniApp编译七层校验、非标需求低成本扩展等工程实践要点,助力开发者规避常见坑点,实现源码可控、自

weixin_34006468的博客 629

Uniapp电销外呼App源码实战:多端通话功能与打包避坑指南

在移动应用开发中,多端适配与系统级通话能力是高频难点。Uniapp作为跨平台框架,通过一套Vue代码即可编译至Android、iOS与H5端,其核心价值在于统一封装底层原生API,显著降低多端开发成本。本文从概念与原理出发,剖析电销外呼App中通话调度、动态权限申请、通讯录联动等关键技术路径,并结合源码说明工程化落地方案。同时针对真实开发场景中的高频故障——如云打包闪退、安卓高版本拨号限制、H5跨域问题,提供实用的排查与解决思路,帮助开发者避开常见陷阱,适用于课程设计、外包交付及前端能力扩展等实际需求,最终

weixin_35835030的博客 141

导入导出Excel方法,很详细

导入导出Excel方法,工具类.很详细注释很多,下载就可以使用,首先还要做出你要导出的Excel模板,标题,字段对应好

《前端bug齁逼多,真假开发说》2023/4/17-2023/4/21问题汇总

拓展: 当我有个新项目 clone下来的时候 npm-run-all 包是没有的 所以我们拓展一个npm run pack 指令 先去下载主包 然后 再去下载子项目 这样最后就是 一个npm run pack指令 同步把所有项目的 package都install了。想要一起运行 比如我们写 一个 前后台都是node的项目,或者我们写乾坤的时候 有主项目和多个子项目在一起,我们正常的操作就是分别进到各个项目里 然后npm run start 去运行。3.npm run all 的使用。

gaoqiang1112的博客 938

语义通信理论必看论文:Towards a Theory of Semantic Communication

了解语义通信发展必看的一篇文章

一去不复返的通信er 3927

Python+uniapp微信小程序新生报到系统实战:从流程设计到部署运维全复盘

高校信息化建设不断深入,新生报到场景对线上化、移动化提出了更高要求。一套可靠的后端服务与跨端小程序,需要兼顾业务流程的完整性、数据处理的一致性与高并发场景下的稳定性。Python凭借FastAPI等框架的高效开发能力,成为校园后端服务的常用选择;uniapp则通过一套代码多端编译,微信小程序、H5等平台均可覆盖。两者结合,配合MySQL持久化存储与Redis缓存加速,可构建从录取名单导入、线上信息确认、报到码生成到现场扫码核验的全链路系统。数据加密存储、事务性更新、接口权限校验等工程实践,保障了敏感信息安全

weixin_29047919的博客 284

OnePlus救砖指南:线刷包与OTA全量包实战解析

本文详细解析了OnePlus手机救砖的两种核心方法:线刷包与OTA全量包。针对手机变砖的不同状况(如黑屏、能进Recovery等),文章提供了清晰的判断标准和对应的实战操作指南。重点阐述了线刷包作为终极救砖手段的底层原理与详细步骤,并对比了OTA全量包作为温和修复方案的使用场景与卡刷流程,旨在帮助用户安全、有效地恢复手机系统。

weixin_28312391的博客 1326

从零构建高精度电子秤:HX711与STM32的时序通信陷阱与实战避坑指南

本文详细解析了使用STM32F103C8T6与HX711模块构建高精度电子秤的通信时序陷阱与实战解决方案。重点探讨了微秒级延迟实现、数据读取算法、校准方法和滤波优化,帮助开发者避开常见通信问题,提升电子秤的测量精度和稳定性。

data3的博客 783
上一篇: unicloud阿里云时区问题
下一篇: 苏州停车攻略Pro
是Pro呀
博客等级 码龄10年 17粉丝 10原创
评论 29
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值