Jquery ajax请求导出Excel表格的实现代码

yizhihongxing

下面将为你详细讲解实现Jquery ajax请求导出Excel表格的完整攻略。

一、准备工作

实现Jquery ajax请求导出Excel表格,我们需要以下的工具、框架和库:

  • Jquery框架
  • file-saver库
  • Blob对象
  • Excel文件模板

二、实现思路

  1. 通过ajax请求获取导出Excel的数据;
  2. 将数据格式转换成Excel文件的格式,这里我们需要使用到file-saver库和Blob对象;
  3. 创建Excel文件模板,并将数据填充到模板中;
  4. 将填充过数据的Excel文件下载至本地。

三、具体实现

1. 引入依赖

首先,我们需要引入Jquery和file-saver库的依赖。

<!-- 引入Jquery -->
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

<!-- 引入file-saver库 -->
<script src="https://cdn.bootcdn.net/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js"></script>

2. 发送ajax请求获取数据

通过ajax请求获取需要导出的数据,并将数据传递给后台进行处理。这里我们通过Jquery的ajax函数实现。

// 发送ajax请求获取导出Excel的数据
$.ajax({
  url: 'export/excel',
  type: 'get',
  data: {
    startDate: '2021-01-01',
    endDate: '2021-01-31'
  },
  success: function(data) {
    // 数据请求成功后,进行数据格式转换并生成Excel表格
  },
  error: function() {
    alert('数据请求失败');
  }
})

3. 将数据转换成Excel格式

在请求成功后,我们需要将返回的数据进行格式转换,将数据格式转换成Excel文件的格式。这里我们使用Javascript中的Blob对象,将数据写入到Blob对象中。

success: function(data) {
  // 数据请求成功后,进行数据格式转换并生成Excel表格
  const sheetName = 'sheet1'; // Excel的表格名称
  const fileName = 'data.xlsx'; // 生成的Excel文件名称

  const fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'; // Excel文件类型

  const dataConvert = new Uint8Array(data); // 将数据转换为Uint8Array格式
  const dataBlob = new Blob([dataConvert], {type: fileType}); // 将数据写入到Blob对象中

  // 文件下载
  saveAs(dataBlob, fileName);
}

4. 填充数据到Excel文件中

将数据格式转换成Excel文件的格式之后,我们需要根据Excel文件模板,将数据填充到模板中。这里我们使用js-xlsx库来操作Excel文件。下面是一个例子:

success: function(data) {
  // 数据请求成功后,进行数据格式转换并生成Excel表格
  const sheetName = 'sheet1'; // Excel的表格名称
  const fileName = 'data.xlsx'; // 生成的Excel文件名称

  const fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'; // Excel文件类型

  const dataConvert = new Uint8Array(data); // 将数据转换为Uint8Array格式
  const dataBlob = new Blob([dataConvert], {type: fileType}); // 将数据写入到Blob对象中

  // 填充数据到Excel文件模板中
  const workbook = XLSX.read(dataConvert, {type: 'array'});
  const worksheet = workbook.Sheets[sheetName];
  const range = XLSX.utils.decode_range(worksheet['!ref']);
  for (let R = range.s.r; R <= range.e.r; ++R) {
    for (let C = range.s.c; C <= range.e.c; ++C) {
      const cellAddress = {c:C, r:R};
      const cell = worksheet[XLSX.utils.encode_cell(cellAddress)];
      if (!cell) continue;
      cell.v = '填充的数据';
    }
  }

  // 文件下载
  const wbout = XLSX.write(workbook, {bookType:'xlsx', type: 'binary'});
  saveAs(new Blob([s2ab(wbout)], {type: 'application/octet-stream'}), fileName);
}

5. 示例1

在下面的示例中,我们通过ajax请求获取一组数据,然后通过JS操作将数据填充到Excel文件模板中,最后将填充好的Excel文件下载至本地。

$.ajax({
  url: '/export/excel',
  type: 'get',
  data: {
    startDate: '2021-01-01',
    endDate: '2021-01-31'
  },
  success: function(data) {
    const sheetName = 'sheet1';
    const fileName = 'data.xlsx';
    const fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8';
    const dataConvert = new Uint8Array(data);
    const dataBlob = new Blob([dataConvert], {type: fileType});

    const workbook = XLSX.read(dataConvert, {type: 'array'});
    const worksheet = workbook.Sheets[sheetName];
    const range = XLSX.utils.decode_range(worksheet['!ref']);
    for (let R = range.s.r; R <= range.e.r; ++R) {
      for (let C = range.s.c; C <= range.e.c; ++C) {
        const cellAddress = {c:C, r:R};
        const cell = worksheet[XLSX.utils.encode_cell(cellAddress)];
        if (!cell) continue;
        cell.v = '填充的数据';
      }
    }

    const wbout = XLSX.write(workbook, {bookType:'xlsx', type: 'binary'});
    saveAs(new Blob([s2ab(wbout)], {type: 'application/octet-stream'}), fileName);
  },
  error: function() {
    alert('请求数据失败');
  }
})

6. 示例2

下面是另一个示例,我们在请求成功后,直接将返回的数据生成Excel文件,并下载至本地。

$.ajax({
  url: '/export/excel',
  type: 'get',
  data: {
    startDate: '2021-01-01',
    endDate: '2021-01-31'
  },
  success: function(data) {
    const fileName = 'data.xlsx';
    const fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8';
    const dataConvert = new Uint8Array(data);
    const dataBlob = new Blob([dataConvert], {type: fileType});

    saveAs(dataBlob, fileName);
  },
  error: function() {
    alert('请求数据失败');
  }
})

四、总结

通过上述的实现操作,我们已经可以使用Jquery ajax请求导出Excel表格了。需要注意的是,根据实际业务需要,数据格式的转换和Excel文件模板的填充方式会有所不同,需要根据具体情况进行修改。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Jquery ajax请求导出Excel表格的实现代码 - Python技术站

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

相关文章

  • 大数据和云计算技术周报(第70期)

    大数据” 三个字其实是个marketing语言,从技术角度看,包含范围很广,计算、存储、网络都涉及,知识点广、学习难度高。      本期会给大家奉献上精彩的:JDK11、spark、redis 、Kylin、海量数据 、Pulsar、量子计算机、容器、工业大数据 。全是干货,希望大家喜欢!!! #大数据和云计算技术社区#希望通过坚持定期分享能帮助同学在大数…

    云计算 2023年4月13日
    00
  • 漫话:什么是云计算?

    本文经授权转载自微信公众号:漫话编程 周末在家,我在看书,女朋友在一旁看游戏直播。两个人相安无事,突然女朋友好像看弹幕有什么东西不理解了,于是问我: 什么是云计算 互联网自1960年开始兴起,最初主要用于军方、大型企业等之间的纯文字电子邮件或新闻集群组服务。直到1990年才开始进入普通家庭,随着Web网站与电子商务的发展,网络已经成为了目前人们离不开的生活必…

    云计算 2023年4月13日
    00
  • 云计算相关的一些概念Baas、Saas、Iaas、Paas

    BaaS(后端即服务:Backend as a Service)公司为移动应用开发者提供整合云后端的边界服务。 SaaS(软件即服务:Software as a Service)提供了完整的可直接使用的应用程序,比如通过 Internet管理企业资源。 IaaS(基础设施即服务:Infrastructure as a Service)消费者通过Interne…

    云计算 2023年4月11日
    00
  • .net core下配置访问数据库操作

    配置访问数据库操作 在.NET Core应用程序中,访问数据库时,需要配置数据库连接以及数据库提供程序。常用的数据库提供程序有:Microsoft SQL Server、MySQL、PostgreSQL和SQLite等。 下面是配置访问数据库操作的完整攻略。 1.添加nuget包 在项目中添加数据库提供程序的nuget包。如需使用MySQL,则添加MySql…

    云计算 2023年5月17日
    00
  • Linux云计算工程师

    一、Linux运维基础 二、Linux运维高级-核心知识提高 三、50台集群实战 四、200-1000台集群实战 五、shell编程企业级实战 六、数据库MySQL和NoSQL 七、LVM虚拟化和机房知识

    云计算 2023年4月13日
    00
  • 云计算课程作业专业词汇

    一、虚拟化 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。 虚拟化使用软件的方法重新定义划分IT资源,可以实现IT资源的动态分配、灵活调度、跨域共享,提高IT资源利用率,使IT资源能够真正成…

    云计算 2023年4月12日
    00
  • 云计算、分布式计算、并行计算、网格计算、集群

    版权声明:本文为博主原创文章。未经博主同意不得转载(联系方式:QQ:312037487 邮箱:andywuchuanlong@sina.cn)。 https://blog.csdn.net/andywuchuanlong/article/details/26098625 转自:http://blog.csdn.net/cuidiwhere/article/d…

    云计算 2023年4月11日
    00
  • Java中Elasticsearch 实现分页方式(三种方式)

    Java中Elasticsearch 实现分页方式(三种方式) Elasticsearch是一个开源的分布式搜索引擎,可以用于全文搜索、结构化搜索和分析等。在Elasticsearch中,实现分页是非常常见的需求。本文将介绍Java中Elasticsearch实现分页的三种方式,并提供示例说明。 1. 使用from和size参数实现分页 Elasticsea…

    云计算 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部