vue3实现导出报表至excel(后端主导)

  <t-button theme="primary" :loading="exloading" @click="exportReports()">导出</t-button>
// 导出
const exportReports = useThrottleFn(async () => {
  if (selectedRowKeys.value.length === 0) {
    MessagePlugin.error('请选择要导出的数据');
    return;
  }
  exloading.value = true;
  const token = localStorage.getItem('token');
  try {
    const res = await exportReport({ sign: 11, date: formData.value.add_time, token, ids: selestData.value });
    exportAreport(res.data, 'c端销售提成报表.xlsx'); // 导出报表
  } finally {
    exloading.value = false;
  }
}, 5000);


//需要调用的接口
export const exportAppropriate = (params: { date: any }) => {
  return request.get({
    url: Api.ExportAppropriate,
    params: { ...params },
    responseType: 'blob',
    timeout: 0,
  });
};
// 导出报表方法
export const exportAreport = async (data, name) => {
  if (!data) {
    return;
  }
  // 将 Blob 对象转换为文本
  const dataAsString = await data.text();
  // console.log(dataAsString, 'dataAsString')
  // console.log(dataAsString.length, 'dataAsString.length')
  // 处理接口 code 为 0 的情况
  if (dataAsString.length < 200) {
    const jsonData = JSON?.parse(dataAsString);
    if (jsonData.code === 0) {
      MessagePlugin.error(jsonData.message || '未知的错误');
      return;
    }
  }
  const blob = new Blob([data], { type: 'application/octet-stream' });
  const eLink = document.createElement('a');
  eLink.href = URL.createObjectURL(blob);
  eLink.download = name;
  eLink.style.display = 'none';
  document.body.appendChild(eLink);
  eLink.click();
  document.body.removeChild(eLink);
};

Node.js配合Vue3实现Excel导出通常需要借助一些前端库(如`xlsx`或`js-xlsx`)和后端支持(比如`file-type`等)。以下是实现的基本步骤: **前端部分(Vue组件):** 1. **安装依赖**: ```sh npm install axios xlsx // 或者 vue3-plugin-excel-export ``` 2. 创建一个函数来生成Excel数据: ```javascript import XLSX from 'xlsx'; export function generateExcel(data) { const workbook = { SheetNames: ['Sheet1'], Sheets: {} }; workbook.Sheets['Sheet1'] = data; return XLSX.write(workbook, { type: 'buffer' }); } ``` 3. 使用axios将Excel数据发送到后端: ```javascript exportExcel() { let excelBuffer = generateExcel(yourData); // 你的数据应转换成适合作为工作表的数据结构 axios.post('/api/export', { file: excelBuffer }, { responseType: 'arraybuffer' }) .then(response => { // 处理返回的结果,例如下载文件或提示用户保存 }) .catch(err => { console.error('Export failed:', err); }); } ``` **后端部分(Node.js API):** 1. 安装必要的模块: ```sh npm install file-type multer ``` 2. 设置一个Express路由接收POST请求并处理文件: ```javascript const express = require('express'); const multer = require('multer'); const fs = require('fs'); const app = express(); const upload = multer({ dest: 'uploads/' }); app.post('/api/export', upload.single('file'), (req, res) => { if (!req.file) { return res.status(400).send('No file uploaded.'); } // 将二进制数据写入临时文件,然后可以将其转换为持久化的文件 fs.writeFile('exported.xlsx', req.file.buffer, (err) => { if (err) { res.status(500).send('Failed to save file: ' + err.message); } else { res.download('exported.xlsx', 'exported_file.xlsx'); // 返回给客户端下载 } }); }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值