网站首页 > 技术文章 正文
需求是这样的,在答题活动结束后,主办方想要导出排行榜成绩到excel,并能够在小程序里面打开查看、转发或下载保存到本地的功能。
我的实现思路大概是这样,先把排行榜数据按照得分排名顺序,处理成对应的JSON数据结构,通过XLSX库生成生成 Excel 文件,使用文件系统管理器写入文件,再通过wx.openDocument打开文件。
通过查阅官方技术文档得知,从微信小程序基础库 2.4.0 开始,wx.arrayBufferToBase64 接口确实已经停止维护。因此,我们需要使用其他方式将 ArrayBuffer 转换为 Base64 编码的字符串。
在小程序中,我们可以通过先将 ArrayBuffer 转换为 TypedArrayArray(如 Uint8Array),然后使用 TextEncoder(但小程序原生不支持 TextEncoder,需要模拟或使用其他库)或手动遍历 TypedArrayArray 来将每个字节转换为对应的 Base64 字符。不过,更简便的方法是使用现有的第三方库,如 base64-js,它可以在小程序中正常运行。
以下是一个使用 base64-js 库将 ArrayBuffer 转换为 Base64 字符串,并导出 JSON 数据为 Excel 文件的示例:
- 安装 base64-js 库:
由于小程序不支持 npm,你需要手动下载 base64-js 的源代码,并将其添加到你的小程序项目中。 - 引入 base64-js 并编写导出逻辑:
// 假设你已经将 base64-js 的代码添加到你的项目中,并放在 libs/base64-js.js 文件中
const Base64 = require('../../libs/base64-js.js');
const XLSX = require('../../libs/xlsx.core.min.js'); // 确保你的 xlsx.core.min.js 路径正确
Page({
// ... 其他页面逻辑
exportToExcel: function () {
// 排行榜 示例 JSON 数据
const jsonData = [
{ name: '刘东旭-xx组', num: 3, score: 95, order: 1 },
{ name: '王思思-xx组', bum: 2, score: 90, order: 2 },
// ... 其他考生数据
];
// 将 JSON 数据转换为工作表
const worksheet = XLSX.utils.json_to_sheet(jsonData);
// 创建一个新的工作簿并将工作表添加到工作簿中
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
// 生成 Excel 文件的二进制内容
const wbout = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });
// 将 ArrayBuffer 转换为 Uint8Array
const uint8Array = new Uint8Array(wbout);
// 使用 base64-js 将 Uint8Array 转换为 Base64 字符串
const base64data = Base64.fromUint8Array(uint8Array);
// 创建一个临时文件路径
const tempFilePath = `${wx.env.USER_DATA_PATH}/export_${Date.now()}.xlsx`;
// 使用文件系统管理器写入文件
const fs = wx.getFileSystemManager();
fs.writeFile({
filePath: tempFilePath,
data: base64data,
encoding: 'base64',
success: () => {
// 打开文件
wx.openDocument({
filePath: tempFilePath,
fileType: 'xlsx',
success: () => {
console.log('文件打开成功');
},
fail: (err) => {
console.error('文件打开失败', err);
},
});
},
fail: (err) => {
console.error('文件写入失败', err);
},
});
},
// ... 其他页面方法
});
javascrip注意注意:
- 在上面的代码中,Base64.fromUint8Array 是 base64-js 库提供的方法,用于将 Uint8Array 转换为 Base64 字符串。
- fs.writeFile 方法在这里使用了异步形式,并传递了一个对象作为参数,这与之前的同步方法 writeFileSync 不同。这样做可以避免阻塞线程。
- 确保你的 base64-js 和 xlsx.core.min.js 文件路径正确无误。
- 导出功能可能会因为小程序的安全策略或文件大小限制而失败。在实际应用中,你可能需要处理这些潜在的错误情况。
- 上一篇: Excel+Access制作工艺流程管理系统5.0
- 下一篇: 前端新工具—vite从入门到实践
猜你喜欢
- 2025-09-11 如何将 JSON 文件转换Excel,做为高手的你一定要会哦!
- 2025-09-11 Vue中mixin怎么理解?_vue.mixin是什么
- 2025-09-11 入口开始解读Vue源码系列(二)——new Vue 的故事
- 2025-09-11 【干货】EasyExcel确实好用,Springboot+EasyExcel实操
- 2025-09-11 EXCEL导入—设计与思考_导入设计要考虑哪些因素
- 2025-09-11 条码记录系统 6.0——Excel+Access
- 2025-09-11 系统开发内嵌“在线Excel”教程(1) -- 设计器
- 2025-09-11 Access 与 Excel 的区别:别再把 Excel 当数据库用
- 2024-12-08 公司大佬对excel导入、导出的封装,那叫一个秒啊
- 2024-12-08 如何将 “在线Excel” 嵌入你的开发系统中?
你 发表评论:
欢迎- 最近发表
-
- 用AI做微信小程序的完整步骤_如何用ai制作微信表情包
- 自习室预约的微信小程序设计与实现-计算机毕业设计源码+LW文档
- 微信小程序开发入门指南_微信小程序开发入门教程
- 写字机器人好用吗? 组装就花了5个小时 还要学习软件、录入字体
- 白描网页版 - 高效准确且免费的OCR文字识别工具
- 字体图形面板与图标字体使用_字体图标的优势和劣势
- 作为前端工程师必须懂得的33个CSS核心概念
- Flutter程序员开发炫酷的登录页面 字体库运用 路由学习 源码分享
- 2025Q3开源字体盘点:让你的代码和文档'颜值'飙升!
- Agent杂谈:Agent的能力上下限及「Agent构建」核心技术栈调研分享~
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- oracle面试 (55)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)