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

为了实现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日

相关文章

  • vue前端重构computed及watch组件通信等实用技巧整理

    Vue前端重构:computed及watch组件通信等实用技巧整理 前言 在Vue的开发过程中,我们时常需要对一些复杂的数据进行计算和转换,而Vue提供的computed属性能够很好地满足我们这方面的需求。此外,Vue还提供了watch属性来监控特定的数据变化。本文主要介绍computed及watch的使用方法和相关实用技巧。 computed属性的使用 c…

    Vue 2023年5月28日
    00
  • vue路由$router.push()使用query传参的实际开发使用

    关于vue路由$router.push()使用query传参的实际开发使用,我将从以下几个方面进行详细讲解。 1. 路由传参 在vue开发中,路由传参是一个非常重要的概念。路由传参可以使我们的组件之间传递数据,可以实现多个组件之间的动态交互。 我们可以通过以下两种方式进行路由传参进行传参: params:通过路由路径匹配传递的参数,通常用于传递必须的参数,如…

    Vue 2023年5月27日
    00
  • Vue Render函数创建DOM节点代码实例

    谈到Vue的Render函数创建DOM节点,需要先介绍一下Render函数。Render函数是用于创建虚拟DOM节点的核心函数,Vue的模板编译成虚拟DOM节点后也是通过Render函数来将其渲染成真正的DOM节点。 在Vue中,我们可以使用Render函数来手动编写创建虚拟DOM节点的代码,从而实现更加灵活的动态渲染效果。下面就让我们来看一下如何使用Ren…

    Vue 2023年5月28日
    00
  • vue实现右上角时间显示实时刷新

    下面我将详细讲解在Vue项目中如何实现右上角时间显示的实时刷新。 一、示例一——使用setInterval 首先,在Vue组件中,我们需要定义两个数据:一个用来保存当前时间的变量和一个用来保存计时器的变量。可以在data中定义这两个变量: data() { return { currentTime: ”, timer: null } } 接着,在mount…

    Vue 2023年5月29日
    00
  • Vue分页器实现原理详解

    首先让我们来了解什么是分页器以及为什么要使用它。分页器通常用于长列表数据(比如搜索结果、文章列表等)的分页展示,它将这些数据分割成多个页面,每页呈现一定数量的内容。当用户需要查看其他页面时,分页器可以快速地进行切换。 Vue分页器的实现原理基于Vue组件化开发思想。实现分页器的过程中,我们需要创建一个Vue组件。在组件的data对象中,我们需要定义一个ite…

    Vue 2023年5月28日
    00
  • vue发送ajax请求详解

    下面我来为大家详细讲解vue发送ajax请求的完整攻略。 一、什么是ajax请求? Ajax,全称为Asynchronous Javascript And XML,即异步的Javascript和XML技术,是一种在不刷新整个页面的情况下与服务器进行数据交互的技术。一般来说,我们发送Ajax请求是为了从服务器获取数据或提交数据到服务器。 二、Vue发送ajax…

    Vue 2023年5月28日
    00
  • 基于vue 动态加载图片src的解决方法

    下面是完整的“基于Vue动态加载图片src的解决方法”的攻略: 1. 背景 在Vue项目中,动态加载图片很常见,但如果在组件中使用v-bind:src动态绑定图片路径,由于Vue在编译时使用“静态渲染”机制,而不是重新计算DOM操作,所以后续修改src的值并不会生效。因此需要使用其他的技巧动态加载图片。 2. 解决方法 2.1 使用require 使用 re…

    Vue 2023年5月28日
    00
  • Vue3+TS+Vite+NaiveUI搭建一个项目骨架实现

    下面我来详细讲解“Vue3+TS+Vite+NaiveUI搭建一个项目骨架实现”的完整攻略。 准备工作 在开始搭建项目骨架之前,我们需要先完成一些准备工作: 确认已安装 Node.js 安装 Vue CLI 4 或更高版本:npm install -g @vue/cli 创建项目:vue create my-project 安装 Vite Vite 是一个新…

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