当前位置:首页 > 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);
      }
    }
  }
}

模板中添加进度显示:

vue实现批量导出

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

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

相关文章

vue实现图片搜索

vue实现图片搜索

Vue实现图片搜索功能 使用HTML5的File API获取图片 通过<input type="file">元素让用户选择图片文件,使用FileReader对象读取图片数据。 <t…

vue实现答题

vue实现答题

Vue 实现答题功能 数据结构设计 使用 Vue 的响应式特性管理题目和答案数据。通常需要以下数据结构: data() { return { questions: [ {…

vue实现数据渲染

vue实现数据渲染

Vue 数据渲染的实现方式 Vue.js 提供了多种数据渲染的方式,包括插值表达式、指令和计算属性等。以下是常见的实现方法: 插值表达式 使用双大括号 {{ }} 将数据绑定到模板中,数据变化时会自…

vue实现精准查询

vue实现精准查询

实现精准查询的方法 在Vue中实现精准查询通常需要结合输入框、数据处理和筛选逻辑。以下是几种常见的方法: 使用计算属性进行筛选 计算属性适合对数据进行实时筛选,响应输入框的变化: <tem…

vue实现添加div

vue实现添加div

在 Vue 中动态添加 div 元素 使用 v-for 指令动态渲染 div 通过 v-for 可以基于数组数据动态生成多个 div 元素。在模板中绑定数组数据,Vue 会自动遍历数组并为每个元素创建…

vue前后端实现

vue前后端实现

Vue 前后端实现方案 Vue 作为前端框架,通常需要与后端服务结合使用。以下是常见的实现方式: 前端实现(Vue) 使用 Vue CLI 或 Vite 创建项目: npm init vue@la…