uniapp导出excel表格

 定义方法

export function doExport(listData) {
  let worksheet = 'sht1'
  let str ='<tr><td style="text-align: center">学号</td><td style="text-align: center">姓名</td><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 < listData.length; i++) {
  	str += '<tr>'
  	for (let item in listData[i]) {
  		// 增加\t为了不让表格显示科学计数法或者其他格式
  		str += `<td>${listData[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
  appExportFile(template)
  // #endif
  // 下载模板
  // #ifdef MP-WEIXIN
  wxExportFile(template)
  // #endif
}
    
function appExportFile(fileData, documentName = '心肺复苏成绩单') {
	console.log('开始导出数据********')
  return new Promise((resolve, reject) => {
    // 1. 权限检查(安卓端)
    if (uni.getSystemInfoSync().platform === 'android') {
      plus.android.requestPermissions(
        ['WRITE_EXTERNAL_STORAGE'],
        () => initExport(),
        (e) => reject(new Error('存储权限被拒绝'))
      )
    } else {
      initExport()
    }

    function initExport() {
      plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS, (fs) => {
        fs.root.getDirectory(documentName, { create: true }, (dirEntry) => {
          const fileName = `${documentName}_${Date.now()}.xlsx`
          
          dirEntry.getFile(fileName, { create: true }, (fileEntry) => {
            fileEntry.createWriter((writer) => {
              writer.onwrite = () => {
				const filePath = fileEntry.toLocalURL()
				resolve(filePath)
				showConfirmDialog(filePath)
              }
              writer.onerror = (e) => reject(e)
              writer.write(fileData)
            }, reject)
          }, reject)
        }, reject)
      }, reject)
	  // 新增确认弹窗
	  const showConfirmDialog = (filePath) => {
	    uni.showModal({
	  	title: '导出成功',
	  	content: `文件已保存到: ${filePath}\n是否立即查看?`,
	  	confirmText: '立即查看',
	  	cancelText: '稍后查看',
	  	success: (res) => {
	  	  if (res.confirm) {
	  		uni.openDocument({
	  		  filePath,
	  		  success: () => console.log('文档打开成功'),
	  		  fail: (err) => uni.showToast({ title: `打开失败: ${err.errMsg}`, icon: 'none' })
	  		})
	  	  }
	  	}
	    })
	  }
    }
  })
}

function wxExportFile(template, documentName = '心肺复苏成绩单') {
	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)
	})
}

应用

import { doExport } from '../../utils/excelExport'
// listData数据类型举例
const listData =[]
for(var i=0; i < res.length; i++){
	const data = {
		学号:res[i].stuId,
		姓名:res[i].stuName,
		分数:res[i].score,
		时长:formatDuration(res[i].duration),
		日期:res[i].date
	}
	listData.push(data)
}
doExport(listData)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值