当前位置:首页 > VUE

vue实现批量导出

2026-01-19 10:52:31VUE

Vue 实现批量导出的方法

使用第三方库(如 xlsx 和 file-saver)

安装依赖库:

npm install xlsx file-saver --save

创建导出逻辑:

import XLSX from 'xlsx';
import { saveAs } from 'file-saver';

export default {
  methods: {
    exportToExcel(data, fileName) {
      const worksheet = XLSX.utils.json_to_sheet(data);
      const workbook = XLSX.utils.book_new();
      XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
      const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });
      const blob = new Blob([excelBuffer], { type: 'application/octet-stream' });
      saveAs(blob, `${fileName}.xlsx`);
    },
    handleBatchExport() {
      const dataList = [...]; // 需要导出的数据数组
      dataList.forEach((data, index) => {
        this.exportToExcel(data, `export_${index + 1}`);
      });
    }
  }
}

使用纯前端实现(无依赖)

创建 CSV 导出方法:

export default {
  methods: {
    exportToCSV(data, fileName) {
      const headers = Object.keys(data[0]).join(',');
      const rows = data.map(item => Object.values(item).join(','));
      const csvContent = [headers, ...rows].join('\n');
      const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
      const link = document.createElement('a');
      link.href = URL.createObjectURL(blob);
      link.setAttribute('download', `${fileName}.csv`);
      document.body.appendChild(link);
      link.click();
      document.body.removeChild(link);
    },
    batchExportCSV(dataList) {
      dataList.forEach((data, index) => {
        this.exportToCSV(data, `export_${index + 1}`);
      });
    }
  }
}

结合后端 API 实现

前端请求批量导出:

export default {
  methods: {
    async batchExportFromAPI(ids) {
      try {
        const responses = await Promise.all(
          ids.map(id => axios.get(`/api/export/${id}`, { responseType: 'blob' }))
        );

        responses.forEach((res, index) => {
          const blob = new Blob([res.data]);
          const link = document.createElement('a');
          link.href = URL.createObjectURL(blob);
          link.setAttribute('download', `export_${ids[index]}.xlsx`);
          document.body.appendChild(link);
          link.click();
          document.body.removeChild(link);
        });
      } catch (error) {
        console.error('导出失败:', error);
      }
    }
  }
}

优化用户体验

添加进度提示:

export default {
  data() {
    return {
      exportProgress: 0,
      totalExports: 0
    };
  },
  methods: {
    async batchExportWithProgress(dataList) {
      this.totalExports = dataList.length;
      this.exportProgress = 0;

      for (const [index, data] of dataList.entries()) {
        await this.exportToExcel(data, `export_${index + 1}`);
        this.exportProgress = Math.round(((index + 1) / this.totalExports) * 100);
      }
    }
  }
}

模板中添加进度显示:

<template>
  <div>
    <button @click="batchExportWithProgress(dataList)">批量导出</button>
    <div v-if="exportProgress > 0">
      导出进度: {{ exportProgress }}%
    </div>
  </div>
</template>

vue实现批量导出

标签: 批量vue
分享给朋友:

相关文章

vue中实现显示和隐藏

vue中实现显示和隐藏

控制显示与隐藏的方法 在Vue中实现元素的显示和隐藏可以通过多种方式完成,以下是常见的几种方法: 1. 使用v-if指令v-if根据条件动态添加或移除DOM元素,适合需要频繁切换的场景。当条件为f…

vue实现jqueryui

vue实现jqueryui

Vue 实现 jQuery UI 功能 在 Vue 项目中实现类似 jQuery UI 的功能,可以通过原生 Vue 组件或第三方库来实现。以下是几种常见 jQuery UI 功能的 Vue 替代方案…

vue实现markdown

vue实现markdown

Vue 实现 Markdown 编辑器 在 Vue 中实现 Markdown 编辑器可以通过集成第三方库或自定义解析器完成。以下是两种常见方法: 使用第三方库(如 marked 或 markdown…

vue能实现

vue能实现

Vue.js 是一个流行的前端框架,能够实现多种功能。以下是 Vue 能够实现的主要功能和特性: 响应式数据绑定 Vue 的核心特性之一是响应式数据绑定。通过数据驱动视图,当数据发生变化时,视图会自…

vue实现frame

vue实现frame

Vue 中实现 iframe 的方法 在 Vue 中可以通过直接使用 <iframe> 标签或动态绑定 src 属性来实现 iframe 功能。 基本用法 <template…

vue实现fullpage

vue实现fullpage

Vue 实现 FullPage 效果 在 Vue 中实现全屏滚动(FullPage)效果可以通过多种方式完成,以下是几种常见的方法: 使用现有库 vue-fullpage.js 安装 vue-ful…