微信小程序导入 导出excel 文件 预览文件并转发

准备js库

XLSX.JS
链接:https://git.sheetjs.com/sheetjs/sheetjs
打开dist目录下的xlsx.mini.min.js  右上角有下载图标点击即可(根据开发需求可下载其他版本)
基本放在utils 包 

引入文件

let XLSX = require('../../../utils/excel')

获取数据 导入

       exportData() {
            const url = "https://sheetjs.com/data/executive.json";
            // 这是一个 Presidents 数据
            wx.request({
              url: url,
              success: (res) => {
                console.log(res);
                // 获取数据
                let raw_data = res.data

                // 处理数据
                const prez = raw_data.filter(row => row.terms.some(term => term.type === "prez"));

                prez.forEach(prez => prez.start = prez.terms.find(term => term.type === "prez").start);

                prez.sort((l, r) => l.start.localeCompare(r.start));

                // 设置 表格数据
                const rows = prez.map(row => ({
                  name: row.name.first + " " + row.name.last,
                  birthday: row.bio.birthday
                }));
                // 生成工作表  导入数据
                const worksheet = XLSX.utils.json_to_sheet(rows); //工作表
                const workbook = XLSX.utils.book_new(); // 工作簿
                XLSX.utils.book_append_sheet(workbook, worksheet, "Dates");
                //找到长度最大
                const max_width = rows.reduce((w, r) => Math.max(w, r.name.length), 10);
                // 设置表格长度 
                worksheet["!cols"] = [{
                  wch: max_width // 表示 第一 竖列的表格宽度度
                }, {
                  wch: 10 //表示 第二 竖列的表格宽度度
                }];
                //  修改标题
                XLSX.utils.sheet_add_aoa(worksheet, [
                  ["Name", "Birthday"]
                ], {
                  origin: "A1"
                });
                // 导出 base64 格式
                var fileData = XLSX.write(workbook, {
                  bookType: "xlsx",
                  type: 'base64'
                })
              }
            })
          },

导出数据 预览


        
        let filePath = `${wx.env.USER_DATA_PATH}/Dates.xlsx`
        // 写文件
        const fs = wx.getFileSystemManager()
        fs.writeFile({
          filePath: filePath,
          data: fileData,
          encoding: 'base64',
          success(res) {
            console.log(res)
            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)
                  util.tips("导出失败")
                }
              })
            } else {
              // 手机端导出
              // 打开文档
              wx.openDocument({
                filePath: filePath,
                showMenu: true,
                success: function (res) {
                  console.log('打开文档成功')
                },
                fail: console.error
              })
            }
          },
          fail(res) {
            console.error(res)
            if (res.errMsg.indexOf('locked')) {
              wx.showModal({
                title: '提示',
                content: '文档已打开,请先关闭',
              })
            }
          }
        })

全部

 exportData() {
    const url = "https://sheetjs.com/data/executive.json";
    // 这是一个 Presidents 数据
    wx.request({
      url: url,
      success: (res) => {
        console.log(res);
        // 获取数据
        let raw_data = res.data

        // 处理数据
        const prez = raw_data.filter(row => row.terms.some(term => term.type === "prez"));

        prez.forEach(prez => prez.start = prez.terms.find(term => term.type === "prez").start);

        prez.sort((l, r) => l.start.localeCompare(r.start));

        // 设置表格数据
        const rows = prez.map(row => ({
          name: row.name.first + " " + row.name.last,
          birthday: row.bio.birthday
        }));

        // 生成工作表 
        const worksheet = XLSX.utils.json_to_sheet(rows); //工作表
        const workbook = XLSX.utils.book_new(); // 工作簿
        XLSX.utils.book_append_sheet(workbook, worksheet, "Dates");
        //找到长度最大
        const max_width = rows.reduce((w, r) => Math.max(w, r.name.length), 10);
        // 设置表格长度 
        worksheet["!cols"] = [{
          wch: max_width // 表示 第一 竖列的表格宽度度
        }, {
          wch: 10 //表示 第第二 竖列的表格宽度度
        }];
        //  修改标题
        XLSX.utils.sheet_add_aoa(worksheet, [
          ["Name", "Birthday"]
        ], {
          origin: "A1"
        });
        // 导出 base64 格式
        var fileData = XLSX.write(workbook, {
          bookType: "xlsx",
          type: 'base64'
        });;

        let filePath = `${wx.env.USER_DATA_PATH}/Dates.xlsx`

        // 写文件
        const fs = wx.getFileSystemManager()
        fs.writeFile({
          filePath: filePath,
          data: fileData,
          encoding: 'base64',
          success(res) {
            console.log(res)
            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)
                  util.tips("导出失败")
                }
              })
            } else {
              // 手机端导出
              // 打开文档
              wx.openDocument({
                filePath: filePath,
                showMenu: true,  // 打开之后 右上角有菜单选项点一下能转发
                success: function (res) {
                  console.log('打开文档成功')
                },
                fail: console.error
              })
            }
          },
          fail(res) {
            console.error(res)
            if (res.errMsg.indexOf('locked')) {
              wx.showModal({
                title: '提示',
                content: '文档已打开,请先关闭',
              })
            }
          }
        })

      }
    })
  },

录制_2023_04_14_09_12_52_124

有问题的 可以来 讨论

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值