uniapp (UI框架:uview2.x) JSON数据导出生成excel

news/2024/7/21 4:20:07 标签: uni-app, json, excel

一、生成下载的表格模板数据

代码如下:

// 建立一个工具类函数文件 utils.js
export function tableToExcel(jsonData, str) {
    //要导出的json数据
    let worksheet = 'sheet1'
    // let str = '<tr><td>姓名</td><td>电话</td><td>邮箱</td></tr>'
    //循环遍历,每行加入tr标签,每个单元格加td标签
    console.log('jsonData: ', jsonData);
    for (let i = 0; i < jsonData.length; i++) {
        str += '<tr>'
        for (let key in jsonData[i]) {
            console.log('key: ', key);
            console.log('jsonData[i][key]: ', jsonData[i][key]);
            //增加\t为了不让表格显示科学计数法或者其他格式
            str += `<td>${jsonData[i][key] + '\t'}</td>`
        }
        str += '</tr>'
        console.log('str: ', str);
    }
    //下载的表格模板数据
    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>`
    //下载模板
    return template
}

二、如何导出Excel

代码如下:

// 同上放在 utils.js
export function exportExcel(fileData, documentName = 'excel') {
    /*
    PRIVATE_DOC: 应用私有文档目录常量
    PUBLIC_DOCUMENTS: 程序公用文档目录常量
    */
    plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS, function (fs) {
        let rootObj = fs.root
        let fullPath = rootObj.fullPath
        console.log("开始导出数据********")
        // 创建文件夹
        rootObj.getDirectory(documentName, {
            create: true
        }, function (dirEntry) {
            // 创建文件,防止重名
            let fileName = new Date().getTime()
            console.log(fileName)
            dirEntry.getFile(`${fileName}.xlsx`, {
                create: true
            }, function (fileEntry) {
                fileEntry.createWriter(function (writer) {
                    writer.onwritestart = (e) => {
                        showLoading('正在导出')
                    }
                    writer.onwrite = (e) => {
                        // 成功导出数据
                        hideLoading()
                        setTimeout(() => {
                            showToast('导出成功')
                            const path = `file://${fullPath}${documentName}/${fileName}.xlsx`
                            console.log('文件位置:', path)
                            // 打开文件
                            uni.openDocument({
                                filePath: path,
                                success: res => {
                                    console.log('打开文档成功', res)
                                },
                                fail: e => {
                                    console.log('打开失败', e)
                                }
                            })
                        }, 500)
                    }
                    // 写入内容
                    writer.write(fileData)
                }, function (e) {
                    console.log(e.message)
                })
            })
        })
    })
}

function showToast(title = '') {
    uni.hideLoading()
    uni.showToast({
        title,
        icon: 'none',
        duration: 1500
    })
}
/**
 * loading
 * @param title
 */
function showLoading(title = '加载中') {
    uni.hideLoading()
    uni.showLoading({
        title,
        mask: true
    })
}
/**
 * hideLoading
 */
function hideLoading() {
    uni.hideLoading()
}

三、如何使用

// 先引入
import { tableToExcel, exportExcel } from '@/util/utils'

// 导出函数 
exportInfo() {
			let carInfoStr = ''
			if (this.carList.length) {
				this.carList.forEach((ele) => {
					carInfoStr += `车辆类型:${ele.selectField101},车牌号:${ele.comInputField102};`
				})
			}

			let jsonData = [
				{
					comInputField103:
						this.householderInfo.comInputField103 || '',
					selectField102_name:
						this.householderInfo.selectField102_name || '',
					comInputField104:
						this.householderInfo.comInputField104 || '',
					radioField113_name:
						this.householderInfo.radioField113_name || '',
					selectField114: this.householderInfo.selectField114 || '',
					carInfo: carInfoStr,
					comInputField109:
						this.householderInfo.comInputField109 || '',
					comInputField105:
						this.householderInfo.comInputField105 || '',
					selectField107_name:
						this.householderInfo.selectField107_name || '',
					comInputField108:
						this.householderInfo.comInputField108 || '',
				},
			]

           // 定义表头
			let str =
				'<tr><td>户主姓名</td><td>性别</td><td>身份证号</td><td>是否党员</td><td>群体</td><td>车辆信息</td></td><td>手机号</td><td>职业</td><td>学历</td><td>住址</td></tr>'
			// 生成template 模板
			let template = tableToExcel(jsonData, str)
			// 导出Excel
			exportExcel(template, '户主信息')
		},

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

相关文章

Shell编程自动化之if、for、while和函数

一、if语句 1.单分支格式 if [ 条件判断式 ]; then当条件判断成立时&#xff0c;执行的命令内容 fi if [ 条件判断式 ] then当条件判断成立时&#xff0c;执行的命令内容 fi 2.双分支格式 if [ 条件判断式 ]; then当条件判断成立时&#xff0c;执行的命令内…

项目配置集成unocss指南

项目配置集成 unocss 指南 什么是 UnoCSS&#xff1f; Unocss 是一个基于 Tailwind CSS的工具 &#xff0c;它通过静态分析 HTML 和 CSS 代码&#xff0c;自动消除未使用的样式&#xff0c;以减小生成的 CSS 文件大小。这个工具可以帮助开发者在使用 Tailwind CSS 进行开发时…

单因素方差分析--R

任务说明 三个剂量水平的药物处理受试者&#xff0c;每个剂量水平十个受试者&#xff0c;现在收集到数据后&#xff0c;问&#xff1a; 药物剂量水平显著影响受试者的response&#xff1f; 或者不同剂量药物处理受试者有显著效果的差异吗&#xff1f; 数据 library(tidyvers…

跳转漏洞靶场记录(重定向漏洞)

目录 简单介绍 绕过方式及更多介绍 靶场搭建 vulhub 漏洞原因 DVWA

使用HTTP/2在Linux上的Nginx服务器进行优化

随着互联网的发展&#xff0c;HTTP/2协议逐渐成为主流。与传统的HTTP/1.1相比&#xff0c;HTTP/2提供了更高的传输效率和更好的安全性。在Linux上使用Nginx服务器进行优化&#xff0c;我们可以充分利用HTTP/2的优势&#xff0c;提高网站的性能和用户体验。 1. 安装Nginx并启用…

通过for循环使用3次plt.text()时,我想这每次plt.text()后换行展示下一个plt.text()

问题描述&#xff1a; 通过for循环使用3次plt.text()时&#xff0c;我想这每次plt.text()后换行展示下一个plt.text() 解决思路 在Matplotlib中&#xff0c;plt.text() 函数用于在图表的指定位置添加文本。如果你想要在使用 plt.text() 时让每个文本显示在不同的行&#xff…

5.【CPP】内存管理(text段data段bss段||nwedelete底层实现||源码)

一.内存管理 1.如图 2.heap下面的空间 应用程序加载到内存中由操作系统完成对bss,data,text,stack加载&#xff0c;并在内存分配空间。在编译阶段已经确定分配了多少空间&#xff0c;属于静态分配。 而malloc等在程序运行时在堆上开辟空间则属于动态分配&#xff0c;需要手动f…

突破注册难题,沃尔玛跨境智星软件助你批量注册买家号

注册沃尔玛的买家号在单个账号的情况下是相当简单的&#xff0c;只需进入沃尔玛官网&#xff0c;点击注册&#xff0c;根据提示信息填写姓名、账号、密码等即可完成。但是&#xff0c;当需求升级到批量注册大量买家号时&#xff0c;情况就变得有些复杂。这时候&#xff0c;除了…