uniapp app 导出excel 表格

news/2024/7/21 7:30:30 标签: uni-app, excel, html5

直接复制运行   

<template>
	<view>
		<button @click="tableToExcel">导出一个表来看</button>
		<view>{{ successTip }}</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				successTip: ''
			}
		},
		methods: {
			uuid() {
				return 'xxx-xxx-xxx'.replace(/[xy]/g, c => {
					var r = Math.random() * 16 | 0,
						v = c == 'x' ? r : (r & 0x3 | 0x8)
					return v.toString(16)
				})
			},

			tableToExcel() {
				// 要导出的json数据
				const jsonData = [{
						name: '科比',
						phone: '123456',
						email: '科比@163.com'
					},
					{
						name: '科比',
						phone: '123456',
						email: '科比@163.com'
					},
					{
						name: '科比',
						phone: '123456',
						email: '科比@163.com'
					},
					{
						name: '科比',
						phone: '123456',
						email: '科比@163.com'
					},
				]
				// 列标题
				let worksheet = 'sht1'
				let str =
					'<tr><td style="text-align: center">姓名</td><td style="text-align: center">电话</td><td style="text-align: center">邮箱</td></tr>'
				// 循环遍历,每行加入tr标签,每个单元格加td标签
				for (let i = 0; i < jsonData.length; i++) {
					str += '<tr>'
					for (let item in jsonData[i]) {
						// 增加\t为了不让表格显示科学计数法或者其他格式
						str += `<td>${jsonData[i][item] + '\t'}</td>`
					}
					str += '</tr>'
				}
				// 下载的表格模板数据

				let 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><!--[if gte mso 9]><xml encoding="UTF-8"><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>${str}</table></body></html>`
				// 下载模板
				// #ifdef APP-PLUS
				this.appExportFile(template)
				// #endif
				// 下载模板
				// #ifdef MP-WEIXIN
				this.wxExportFile(template)
				// #endif
			},

			// 导出文件到手机 fileData:要写入到文件的数据,返回参数为文档路径
			appExportFile(fileData, documentName = '项目Excel文件') {
				// PUBLIC_DOCUMENTS: 程序公用文档目录常量
				plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS, fs => {
					let rootObj = fs.root,
						fullPath = rootObj.fullPath
					console.log('开始导出数据********')
					// 创建文件夹
					rootObj.getDirectory(documentName, {
						create: true
					}, dirEntry => {
						// 创建文件,防止重名
						let fileName = 'excel' + this.uuid() + '.xlsx'
						dirEntry.getFile(fileName, {
							create: true
						}, fileEntry => {
							fileEntry.createWriter(writer => {
								writer.onwritestart = res => console.log('正在导出')
								//  /storage/emulated/0指的就是系统路径
								let pathStr = fullPath.replace('/storage/emulated/0', '')
								// 成功导出数据
								writer.onwrite = res => {
									// 文件路径
									let filePath = res.target.fileName
									uni.hideLoading()
									setTimeout(() => {
										console.log('成功导出')
										this.successTip = `文件位置:${filePath}`

										uni.openDocument({
											filePath,
											success: res => console
												.log('打开文档成功'),
											fail: err => console.log(
												err)
										})
									}, 500)
								}
								// 写入内容
								writer.write(fileData)
							}, err => console.log(err.message))
						})
					})
				})
			},

			wxExportFile(template, documentName = '项目Excel文件') {
				const fs = wx.getFileSystemManager()
				// 创建文件名字, 防止重名
				let filePath = wx.env.USER_DATA_PATH + '/' + (documentName + this.uuid()) + '.xls'
				fs.writeFile({
					filePath,
					data: template,
					encoding: 'utf8',
					success: res => {

						wx.openDocument({
							filePath,
							showMenu: true, //是否显示右上角菜单
							success: res => console.log('打开文档成功。文件位置', filePath),
							fail: err => console.log(err)
						})
					},
					fail: err => console.info(err)
				})
			}
		}
	}
</script>

  这里用到小程序和app段的api

wx.getFileSystemManager()
获取全局唯一的文件管理器

返回值
FileSystemManager
 

wx.openDocument 预览文件
wx.openDocument({
							filePath,
						showMenu:true, //是否右上角菜单,这样就可以转发给好友了
							success: res => console.log('打开文档成功。文件位置', filePath),
							fail: err => console.log(err)
						})

uniapp 微信小程序 /APP json数据导出excel文件_uniapp导出excel文件_初遇你时动了情的博客-CSDN博客 

 


http://www.niftyadmin.cn/n/5056955.html

相关文章

组会记录2023/9/28

一、RankIQA: Learning from Rankings for No-reference Image Quality Assessment &#xff08;RankIQA:学习无参考图像质量评估的排名&#xff09; 1、概述 利用大型、未标记的数据库。给定一组参考图像&#xff0c;很容易施加图像失真(如高斯模糊)来生成排序图像数据集。这…

点云从入门到精通技术详解100篇-基于深度学习的三维植物点云分割网络(续)

目录 3.7定量衡量指标 3.8 语义分割结果 3.9实例分割结果 3.10 与其他方法的对比 3.11 剥离实验

Vovsoft Text Edit Plus 专业文本编辑器工具软件:简洁高效的创作利器

作为一名专业软件评测人员&#xff0c;我有幸使用了一款备受赞誉的文本编辑器工具软件——Vovsoft Text Edit Plus。在这篇评测中&#xff0c;我将客观、细致地分析它的实用性和使用场景&#xff0c;同时揭示它的优缺点&#xff0c;帮助您更好地了解这款软件。 第一部分&#x…

msys2 ffmpeg库编译安装(Windows篇)

ffmpeg库编译安装及入门指南&#xff08;Windows篇&#xff09; ffmpeg 简介 ffmpeg是一套跨平台的&#xff0c;用于音视频录制、转换、流化等操作的完善的解决方案&#xff0c;它是业界最负盛名的开源音视频框架之一。许多软件都是基于ffmpeg开发的&#xff0c;如格式工厂、…

工厂方法模式 创建型模式之四

工厂方法模式定义一个创建对象的接口&#xff0c;让子类决定实例化那个类&#xff0c;也就是让类的实例化推迟到子类中进行。因为当需要增加一个新的产品时&#xff0c;我们需要增加一个具体的产品类和与之对应的具体子工厂&#xff0c;然后在具体子工厂方法中进行对象实例化&a…

uniapp h5 端 router.base设置history后仍有#号

manifest.json文件设置&#xff1a; "h5": { "router": { "base": "./", "mode": "history" }, }按相对路径发行时路由模式强制为hash模式&#xff0c;不支持history模式&#xff08;两者相悖&#xff09;…

完整指南:如何使用 Node.js 复制文件

文件拷贝指的是将一个文件的数据复制到另一个文件中&#xff0c;使目标文件与源文件内容一致。Node.js 提供了文件系统模块 fs&#xff0c;通过该模块可以访问文件系统&#xff0c;实现文件操作&#xff0c;包括拷贝文件。 Node.js 中文件拷贝方法 在 Node.js 中&#xff0c;有…

【Unity ShaderLab 还原嗜血边缘角色渲染效果_“Niohoggr“_角色渲染(第一篇)】

还原嗜血边缘角色着色效果 《嗜血边缘》截取其中的片段如下:资源分析其中Guitar贴图4张模型:人物细节图:人物模型 Inspector面板这里做一个区域区分:Body贴图1_BCBody贴图2_NBody贴图3_CMBody贴图4_SRMBody贴图4_RGB,分别在模型中显示的区域Reflection Probe《嗜血边缘》 设…