微信小程序导出Excel文件并转发给好友

news/2024/10/3 4:43:43

需求:
小程序的列表页面增加导出功能,点击“批量导出”按钮,则自动生成导出文件,然后自动调起微信好友列表,然后可以将文件发送给微信好友

解决方案:
由于列表数据是分页加载,所以导出直接由后端同学进行生成并返回url,则我们前端同学只负责下载wx.downloadFile并转发wx.shareFileMessage,官方文档

//template
<button @tap="exportData">批量导出</button>//js
exportData(){const { tempFilePath } = await wx.downloadFile({url: URL, // 下载url})// 下载完成后转发await wx.shareFileMessage({filePath: res.tempFilePath,})
}  

wx.shareFileMessage在PC端提示不支持,可使用wx.saveFileToDisk保存文件(wx.saveFileToDisk仅PC端支持)

exportData(){const { tempFilePath } = await wx.downloadFile({url: URL, // 下载url})const sysInfo = wx.getSystemInfoSync()if (sysInfo.platform.toLowerCase().indexOf('windows') >= 0) {// 保存文件系统的文件到用户磁盘,仅在 PC 端支持wx.saveFileToDisk({filePath: tempFilePath,success(res) {console.log(res)},fail(res) {console.error(res)}})}else{await wx.shareFileMessage({filePath: tempFilePath,})}  
} 

关于导出

如果数据是一次全部拉取的,那么导出功能可能也行大概需要前端自己实现。

解决方案:sheetjs 官网
  • 安装
npm i --save https://cdn.sheetjs.com/xlsx-0.20.1/xlsx-0.20.1.tgz
  • 使用
import { utils, write } from 'xlsx';getExcel(){// 构建一个表的数据let sheet = []let title = ['昵称', '手机号', '创建时间']sheet.push(title)this.list.forEach(item => {sheet.push([item.nickName, item.phone, item.createTime])})// 自定义列宽const colWidth = [{ wch: 15 },{ wch: 15 },{ wch: 20 }]let worksheet = utils.aoa_to_sheet(sheet); //创建工作表,将二维数组转化为工作簿worksheet['!cols'] = colWidthlet workbook = utils.book_new(); // 创建工作簿utils.book_append_sheet(workbook, worksheet, "报名名单"); // 将工作表添加到工作簿集合中let fileData = write(workbook, {bookType: "xlsx",type: 'base64'});return fileData
},
async exportData(){let fileData = await this.getExcel()// 写文件let filePath = `${wx.env.USER_DATA_PATH}/报名名单.xlsx`const fs = wx.getFileSystemManager()await fs.writeFile({filePath: filePath,data: fileData,encoding: 'base64',bookSST: true,success(res) {console.log(res)},fail(res) {console.error(res)if (res.errMsg.indexOf('locked')) {wx.showModal({title: '提示',content: '文档已打开,请先关闭',})}}})const sysInfo = wx.getSystemInfoSync()if(!wx.canIUse('shareFileMessage')){if (sysInfo.platform.toLowerCase().indexOf('windows') >= 0) {// 保存文件系统的文件到用户磁盘,仅在 PC 端支持wx.saveFileToDisk({filePath: filePath,success(res) {console.log(res)},fail(res) {console.error(res)}})}else{wx.showModal({title: '提示',content: '当前微信版本不支持,请先更新微信',showCancel: false})}}else{wx.shareFileMessage({filePath: filePath,success() {},fail: console.error,})}
}

以上代码是基于MPvue框架实现的,其他框架自行参考官网Demo
(别问为啥还用这mpvue,问就是历史遗留项目)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

前端报错

一、加载控制台报错,但功能好像还都正确。 原因:组件还没加载就访问,是会报类似如下的错

在云打印服务平台上打印资料有什么优势?

随着移动互联网和电子商务的发展,现在有越来越多的用户选择在网上购物。而对于学生们来说,现在也有越来越多的同学们开始去网上打印。而云打印的出现,让这些网上打印资料的学生选择了云打印服务。那么在云打印服务平台上打印资料有什么优势?今天小易就带大家来了解一下。 在…

你的许可证不是正版,你可能是盗版软件的受害者?

你的许可证不是正版,你可能是盗版软件的受害者? 问题分析 有的用户在使用 Office 时可能会遇到许可证问题,可能是弹窗,也有可能是横幅。 我们不讨论以前是什么样,现在是这样的: 微软为了遏制 KMS 盗版过于横行,封禁了使用 KMS 工具进行激活的手段,因为使用 KMS 工具激活…

Go-Zero自定义goctl实战:定制化模板,加速你的微服务开发效率(四)

gozero如何自定义goctl?本文详解和实战,通过本文你将了解goctl的妙用,提高你的开发效率。介绍如何使用goctl工具实现模板定制化,并根据实际项目业务需求进行模板定制化实现。前言 上一篇文章带你实现了Go-Zero和goctl:解锁微服务开发的神器,快速上手指南,本文将继续深入…

1、安装terminator分屏工具

1 安装分屏工具terminator 打开ubuntu自带终端,输入sudo apt-get install terminator命令安装分屏工具terminator。 再重新打开ubuntu自带终端,在屏幕上右击

【GaussDB(for MySQL)】 Big IN查询优化

在生产环境中,经常会遇到客户业务的SQL语句进行过滤查询,然后进行聚合处理,并且IN谓词列表中包含几千甚至上万个常量值。本文分享自华为云社区《【MySQL技术专栏】GaussDB(for MySQL) Big IN查询优化》,作者:GaussDB 数据库。背景介绍在生产环境中,经常会遇到客户业务的S…

2 集成开发环境的搭建

1 安装分屏工具terminator 打开ubuntu自带终端,输入sudo apt-get install terminator命令安装分屏工具terminator。 再重新打开ubuntu自带终端,在屏幕上右击