vue中后端做Excel导出功能返回数据流前端的处理操作

yizhihongxing

为了实现Vue中后端做Excel导出功能返回数据流前端的处理操作,我们需要在后端生成Excel文件,并将其返回给前端,前端再将返回的数据流进行处理,以生成Excel文件。具体的步骤如下所述:

  1. 后端生成Excel文件

我们可以使用开源的Excel处理库,在后端生成Excel文件。例如,我们可以使用phpspreadsheet这个库来生成Excel文件。首先,需要安装phpspreadsheet:

composer require phpoffice/phpspreadsheet

接下来,我们可以按照如下代码,使用phpspreadsheet来生成Excel文件:

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\IOFactory;

public function exportExcel(){
    // 创建一个Excel对象
    $spreadsheet = new Spreadsheet();
    // 设置列名称
    $spreadsheet->getActiveSheet()->setCellValue('A1', '姓名')
        ->setCellValue('B1', '年龄')
        ->setCellValue('C1', '地址');

    // 设置数据
    $spreadsheet->getActiveSheet()->setCellValue('A2', '张三')
        ->setCellValue('B2', 20)
        ->setCellValue('C2', '北京市');
    $spreadsheet->getActiveSheet()->setCellValue('A3', '李四')
        ->setCellValue('B3', 30)
        ->setCellValue('C3', '上海市');

    // 创建Excel写入器
    $writer = new Xlsx($spreadsheet);

    // 将Excel写入一个临时文件
    $temp_file = tempnam(sys_get_temp_dir(), 'excel');
    $writer->save($temp_file);

    // 读取Excel文件内容
    $content = file_get_contents($temp_file);
    // 删除临时文件
    unlink($temp_file);

    // 返回Excel内容
    return response($content, 200, [
        'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
        'Content-Disposition' => 'attachment; filename=example.xlsx',
    ]);
}

如上代码,我们使用phpspreadsheet这个库来创建Excel对象,并设置Excel的列名称和数据,最后将Excel文件写入一个临时文件,并通过response函数返回Excel内容。在返回Excel文件时,需要设置Content-Type和Content-Disposition头部,使浏览器能够正确地响应下载请求。

  1. 前端处理数据流

在Vue中,我们可以使用axios库来获取Excel数据流,并将其转换为Blob对象,然后使用file-saver库将Blob对象保存到本地文件中。例如:

import axios from 'axios';
import { saveAs } from 'file-saver';

export default {
  methods: {
    handleExportExcel() {
      axios.get('/exportExcel', { responseType: 'blob' })
        .then(response => {
          const contentType = response.headers['content-type'];
          // 如果返回的内容不是Excel文件
          if (contentType.indexOf('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') === -1) {
            this.$message.error('导出失败!返回文件类型不正确!');
            return;
          }

          // 将数据流转换为Blob对象
          const blob = new Blob([response.data], { type: contentType });

          // 将Blob对象保存到本地文件中
          saveAs(blob, 'example.xlsx');
        })
        .catch(error => {
          console.log(error);
        });
    }
  }
}

如上代码,首先使用axios库来获取Excel文件的数据流。由于Excel文件是二进制格式的数据,我们需要设置axios的responseType为'blob',表示将响应数据作为二进制流进行处理。通过判断响应的Content-Type头部来确定返回的数据是否为Excel文件。如果是Excel文件,则将其转换为Blob对象,并使用file-saver库将Blob对象保存到本地文件中。

以上就是Vue中后端做Excel导出功能返回数据流前端的处理操作的完整攻略。

以下是示例代码解释:

  1. 后端生成Excel文件代码解释:

在这个例子中,我们使用phpspreadsheet这个库来创建Excel对象,并设置Excel的列名称和数据。需要注意的是,由于Excel文件是二进制文件,因此我们需要将其写入一个临时文件中,再读取该文件的内容,并将其返回给前端。在返回Excel文件时,需要设置Content-Type和Content-Disposition头部。Content-Type头部用来指定返回的文件类型,Content-Disposition头部用来指定文件名和是否作为附件下载。

  1. 前端处理数据流代码解释:

在这个例子中,我们使用axios库来获取Excel文件的数据流,将响应数据作为二进制流进行处理。通过判断响应的Content-Type头部来确定返回的数据是否为Excel文件。如果是Excel文件,则将其转换为Blob对象,并使用file-saver库将Blob对象保存到本地文件中。需要注意的是,由于file-saver库依赖于File API,因此在使用该库前需要确保浏览器支持File API。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue中后端做Excel导出功能返回数据流前端的处理操作 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • vuex实现及简略解析(小结)

    Vuex实现及简略解析 Vuex是一个专为Vue.js设计的状态管理库,他采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。在大型的Vue.js应用程序中,多个组件之间共享同一状态,直接进行状态传递会比较麻烦。在这种情况下,我们可以使用Vuex。本文详细介绍了Vuex的实现和简略的解析。 Vuex简单介绍 Vuex提供…

    Vue 2023年5月28日
    00
  • vue简单的store详解

    Vue简单的Store详解 在Vue中,通过使用Vuex来管理应用的状态。它包含了一个全局的状态管理器,通过单向数据流的方式来管理数据。Vuex可以集中管理组件之间的数据共享,以及对数据的具体控制。 Vuex Store 在Vuex中,一个store就是把用户的所有状态集中到一起的容器,可以通过store中的state来管理用户的所有状态。在store中,可…

    Vue 2023年5月28日
    00
  • Template ref在Vue3中的实现原理详解

    下面是针对 “Template ref在Vue3中的实现原理详解” 的完整攻略。 什么是 Template ref? Template ref 是 Vue 组件中用来获取子组件或 HTML 元素的引用的方式,在 Vue2 中我们可以通过 $refs 对象或 $refs 属性来获取对应的引用。如下所示: <template> <div ref…

    Vue 2023年5月27日
    00
  • vue+element开发使用el-select不能回显的处理方案

    下面是详细的解释。 背景 在Vue+Element前端开发中,使用el-select组件时,有时我们需要实现对下拉选项的回显功能。但是实际使用中,发现el-select在使用v-model绑定数据进行回显时存在问题,即无法正确地显示默认值。 原因 这是因为在Vue中,父组件在挂载之前会先于子组件执行,导致el-select还没有加载完,所以无法正确地设置默认…

    Vue 2023年5月28日
    00
  • 利用Vue3实现一个可以用js调用的组件

    实现一个可通过 JS 调用的 Vue3 组件,需要以下几个步骤: 定义组件: defineComponent 注册组件: createApp().component 渲染组件: createApp().mount 下面是两个示例来说明如何实现。 示例一: 本示例将展示如何通过 JS 调用一个带有参数的组件。 1. 定义组件 import { defineCo…

    Vue 2023年5月27日
    00
  • vue项目页面的打印和下载PDF加loading效果的实现(加水印)

    要实现Vue项目页面的打印和下载PDF加loading效果的实现(加水印),需要按照以下步骤进行: 1. 安装依赖 需要安装以下两个依赖: html2canvas:用于将页面截图并转换为canvas。 jspdf:用于将canvas转成PDF。 可以使用以下命令进行安装: npm install html2canvas jspdf –save 2. 实现打…

    Vue 2023年5月27日
    00
  • Vue3中watch监听使用详解

    下面详细讲解Vue3中watch监听的使用方法。 什么是Vue3中的watch监听 watch监听是Vue3的一个新特性,它可以用于观察 Vue 实例数据的变化,执行一些副作用操作。Vue3中watch监听的基本语法如下: <template> <div> {{ message }} </div> </templat…

    Vue 2023年5月29日
    00
  • 封装Vue Element的table表格组件的示例详解

    首先介绍一下Vue Element的table表格组件,它是基于Vue.js的易用的表格组件,能够快速方便地创建数据表格,支持分页、排序和多选等功能,并且形象直观地展示数据。 下面我们主要是介绍一下如何进行封装,以便更好地使用。 第一步,建立自己的table组件,将其封装进Vue组件中。 <template> <div> <el…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部