一,在小程序的页面引入xlsx库
// 引入依赖库
const XLSX = require("../../utils/xlsx.mini.min");
二,定义导出Excel报表的方法
ExportExcel:function(){
//表内容
let xlsxdata=[
{
rgtime:"2024-09-01 19:35:53",
name:'a',
age:20
},{
rgtime:"2024-09-02 19:35:53",
name:'b',
age:20
},{
rgtime:"2024-09-03 19:35:53",
name:'c',
age:20
}]
// 表头
let title = ['注册时间', '姓名', '年龄'];
let sheet = []l
// 数据整理
xlsxdata.forEach(item => {
let rowcontent = []
rowcontent.push(item.id)
rowcontent.push(item.name)
sheet.push(rowcontent)
});
// XLSX插件使用
var ws = XLSX.utils.aoa_to_sheet(sheet);
var wb = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wb, ws, "excal2024");
const fileData = XLSX.write(wb, { bookType: 'xlsx', type: 'base64' });
//保存的本地地址
const filePath = `${wx.env.USER_DATA_PATH}/excal2024.xlsx`;
// 写文件
const fs = wx.getFileSystemManager()
fs.writeFile({
filePath: filePath,
data: fileData,
encoding: 'base64',
success(res) {
console.log(res);
that.setData({xlsxpath:filePath});
//filePath 是写入资源的临时保存路径
},
fail(res) {
console.error(res)
}
});
}
三,打开预览生成的excel文件
// 打开文档
wx.openDocument({
filePath: filePath,
success: function (res) {
console.log('打开文档成功')
},
fail: console.error
})
四,电脑端导出excel文件
const sysInfo = wx.getSystemInfoSync()
// 导出
if (sysInfo.platform.toLowerCase().indexOf('windows') >= 0) {
// 电脑PC端导出
wx.saveFileToDisk({
filePath: filePath,
success(res) {
console.log(res)
},
fail(res) {
console.error(res)
console.log("导出失败")
}
})
}
五,下载远程Excel文件
url是放在远程上要下载的excel文件路径
wx.downloadFile({
url: 'https://xxx.com/excel文件.xls',
filePath: wx.env.USER_DATA_PATH + '/'+ '自定义名字.xlsx',
success(res) {
console.log('downloadFile',res)
const filePath = res.tempFilePath
wx.openDocument({
filePath: filePath,
fileType: 'xlsx',
success: function(ress) {
console.log('打开文档成功',ress)
},
fail: function(err) {
console.log('保存失败:', err)
}
})
六,下载远程Excel文件后分享给微信好友
wx.downloadFile({
url: 'https://xxx.cn/excel文件.xls', // 下载url
success (res) {
console.log('ressss',res)
if(res.statusCode == 200) {
console.log('res.statusCode',res)
// that.openFileEvs(res)
wx.shareFileMessage({
filePath: res.tempFilePath,
success(data) {
console.log('转发成功!!!',data)
},
fileName:'自定义文件名字.xlsx',
fail: console.error,
})
}
},
fileName:'excelname',
fail: console.error,
})
七,解决导出excel文件后分享好友bug
<button bindtap="ExportExcel" style="color:#1989fa"> 分享excel </button>
fs.writeFile({
filePath: filePath,
data: fileData,
encoding: 'base64',
success(res) {
console.log(res);
wx.shareFileMessage({
filePath: filePath,
fileType: 'xlsx',
fileName:'自定义文件名字.xlsx',
success(data) {
console.log('转发成功!!!',data)
},
fail: console.error,
})
},
fail(res) {
}
});
如果是按上面的方法调用导出excel文件并分享好友点击分享excel按钮 会提示报错
解决办法:将写文件fs.writeFille函数和wx.shareFileMessage 分开调用,不要嵌套在一个函数中使用,wx.shareFileMessage需要直接用按钮的binptap的绑定事件打开,这样就不会在报shareFileMessage:fail can only be invoked by user TAP gesture
<button bindtap="ExportExcel" style="color:#1989fa"> 导出Excel </button>
<button bindtap="shareEvent" style="color:#1989fa"> 分享Excel </button>
导出Excel函数
ExportExcel:function(){
//表内容
let xlsxdata=[
{
rgtime:"2024-09-01 19:35:53",
name:'a',
age:20
},{
rgtime:"2024-09-02 19:35:53",
name:'b',
age:20
},{
rgtime:"2024-09-03 19:35:53",
name:'c',
age:20
}]
// 表头
let title = ['注册时间', '姓名', '年龄'];
let sheet = []l
// 数据整理
xlsxdata.forEach(item => {
let rowcontent = []
rowcontent.push(item.id)
rowcontent.push(item.name)
sheet.push(rowcontent)
});
// XLSX插件使用
var ws = XLSX.utils.aoa_to_sheet(sheet);
var wb = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wb, ws, "excal2024");
const fileData = XLSX.write(wb, { bookType: 'xlsx', type: 'base64' });
//保存的本地地址
const filePath = `${wx.env.USER_DATA_PATH}/excal2024.xlsx`;
// 写文件
const fs = wx.getFileSystemManager()
fs.writeFile({
filePath: filePath,
data: fileData,
encoding: 'base64',
success(res) {
console.log(res);
that.setData({xlsxpath:filePath});
//filePath 是写入资源的临时保存路径
},
fail(res) {
console.error(res)
}
});
}
分享excel
shareEvent(){
var filePath = this.data.xlsxpath;
wx.shareFileMessage({
filePath: filePath,
fileType: 'xlsx',
fileName:'自定义文件名字.xlsx',
success(data) {
console.log('转发成功!!!',data)
},
fail: console.error,
})
},
github地址:GitHub - SheetJS/sheetjs: 📗 SheetJS Spreadsheet Data Toolkit -- New home https://git.sheetjs.com/SheetJS/sheetjs
下载地址:SheetJS - CDN