SSM中excel的导出以及poi的使用

首先,这是我对自己的需求而使用的逻辑,若有可以完美的地方方便告诉下小白。

MAVEN

<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.16</version>
        </dependency>

1、前端页面,伪异步(页面不刷新)

为什么不用ajax呢?

JQuery的ajax函数的返回类型只有xml、text、json、html等类型,没有“流”类型。所以就用js做个form表单请求

上代码

1 function exportExcel(){
2             var myurl="${context}/assetInLibrary/export";
3             var form=$("<form>");
4             form.attr("style","display:none");
5             form.attr("method","post");
6             form.attr("action",myurl);
7             $("body").append(form);
8         }

2、在工具包中创建ViewExcel,继承AbstractExcelView

先上代码

 1 public class ViewExcel extends AbstractExcelView {
 2
 3     private String[] titles;
 4
 5     //传入指定的标题头
 6     public ViewExcel(String[] titles) {
 7         this.titles=titles;
 8     }
 9
10     @Override
11     protected void buildExcelDocument(Map<String, Object> model,
12             HSSFWorkbook workbook, HttpServletRequest request,
13             HttpServletResponse response) throws Exception {
14         //获取数据
15         List<Map<String, String>> list = (List<Map<String, String>>) model.get("excelList");
16         //在workbook添加一个sheet
17         HSSFSheet sheet = workbook.createSheet();
18         sheet.setDefaultColumnWidth(15);
19         HSSFCell cell=null;
20         //遍历标题
21         for (int i = 0; i < titles.length; i++) {
22             //获取位置
23             cell = getCell(sheet, 0, i);
24             setText(cell, titles[i]);
25         }
26         //数据写出
27         for (int i = 0; i < list.size(); i++) {
28             //获取每一个map
29             Map<String, String> map=list.get(i);
30             //一个map一行数据
31             HSSFRow row = sheet.createRow(i+1);
32             for (int j = 0; j < titles.length; j++) {
33                 //遍历标题,把key与标题匹配
34                 String title=titles[j];
35                 //判断该内容存在mapzhong
36                 if(map.containsKey(title)){
37                     row.createCell(j).setCellValue(map.get(title));
38                 }
39             }
40         }
41          //设置下载时客户端Excel的名称
42         String filename = new SimpleDateFormat("yyyy-MM-dd").format(new Date())+".xls";
43         response.setContentType("application/vnd.ms-excel");
44         response.setHeader("Content-disposition", "attachment;filename=" + filename);
45         OutputStream ouputStream = response.getOutputStream();
46         workbook.write(ouputStream);
47         ouputStream.flush();
48         ouputStream.close();
49     }
50
51 }

在构造函数中传进来需导出的titles,也就是excel中的标题头,这个逻辑会有点麻烦,因为我是创建Map,让dao中查出来的数据根据我的Map(‘title’,‘value‘)进行封装,且title要存在于传进来的titles中,剩下看源码就能明白

3、service中的数据封装

 1 public List<Map<String, String>> selectAllAssetInlibraryInfo() {
 2         List<AssetInlibrary> list = assetInlibraryMapper.selectByExample(null);
 3         List<Map<String, String>> mapList=new ArrayList<Map<String,String>>();
 4         for (AssetInlibrary assetInlibrary : list) {
 5             Map<String, String> map=new HashMap<String, String>();
 6             map.put("编号", assetInlibrary.getId()+"");
 7             map.put("资产名称", assetInlibrary.getTitle());
 8             AssetType assetType = assetTypeMapper.selectByPrimaryKey(assetInlibrary.getAssetTypeId());
 9             map.put("资产类型", assetType.getTitle());
10             AssetBrand assetBrand = assetBrandMapper.selectByPrimaryKey(assetInlibrary.getAssetBrandId());
11             map.put("资产品牌", assetBrand.getTitle());
12             AssetStorage assetStorage = assetStorageMapper.selectByPrimaryKey(assetInlibrary.getAssetStorageId());
13             map.put("资产存放地点", assetStorage.getTitle());
14             AssetProvider assetProvider = assetProviderMapper.selectByPrimaryKey(assetInlibrary.getAssetProviderId());
15             map.put("资产供应商", assetProvider.getTitle());
16             mapList.add(map);
17         }
18         return mapList;
19     }

4、controller中的数据交互

1 @RequestMapping("/assetInLibrary/export")
2     public ModelAndView export(ModelMap map) throws Exception{
3         List<Map<String,String>> list = assetInLibraryService.selectAllAssetInlibraryInfo();
4         String[] titles={"编号","资产名称","资产类型","资产品牌","资产存放地点","资产供应商"};
5         ViewExcel excel=new ViewExcel(titles);
6         map.put("excelList", list);
7         return new ModelAndView(excel,map);
8     }

版权声明:本文为不会代码的小白原创文章,未经允许不得转载。

时间: 2024-10-24 21:43:55

SSM中excel的导出以及poi的使用的相关文章

java中excel导入\导出工具类

1.导入工具 1 package com.linrain.jcs.test; 2 3 4 import jxl.Cell; 5 import jxl.Sheet; 6 import jxl.Workbook; 7 import jxl.write.Label; 8 import jxl.write.WritableSheet; 9 10 import java.io.InputStream; 11 import java.lang.reflect.Field; 12 import java.te

yii2 中excel表导出

首先下载phpexcel 在引入类文件(在web中index.php入口文件或者控制器中引入) require_once dirname(dirname(__FILE__)).'/excel/PHPExcel.php'; require_once dirname(dirname(__FILE__)).'/excel/PHPExcel/IOFactory.php';require_once dirname(dirname(__FILE__)).'/excel/PHPExcel/Reader/Exc

c#中Excel格式化导出数据

在项目开发过程中经常会遇到数据导出Excel.如果只是导出数据就好办了.但往往用户会有各种格式要求.加粗.边框.合并单元格.汇总等功能. 以下的方法是基于Excel模版方式写入数据导出的功能.可以最大满足用户的格式需求.可以提前所相应的数据列设置好对齐方式,是否加粗.数据格式.保留小数位.对文本型的数据一定要设置成文本格式,不然像数字型的字符串就会出现类似于3.4E+17这格式. 注意Excel中下标是从1,1开始的. 合并单元格方法: Microsoft.Office.Interop.Exce

java项目中Excel文件的导入导出

1 package poi.excel; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.OutputStream; 6 import java.lang.reflect.Field; 7 import java.lang.reflect.Method; 8 import java.util.ArrayList; 9 import java.util.List; 10 11 import

Java中导入、导出Excel

一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际的开发中,很多时候需要实现导入.导出Excel的应用. 目前,比较常用的实现Java导入.导出Excel的技术有两种Jakarta POI和Java Excel 下面我就分别讲解一下如何使用这两个技术实现导入.导出Excel 二.使用Jakarta POI导入.导出Excel Jakarta POI

一个基于POI的通用excel导入导出工具类的简单实现及使用方法

前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴.经过思考,认为一百个客户在录入excel的时候,就会有一百个格式版本,所以在实现这个功能之前,所以要统一excel的格式.于是提供了一个通用excel模版的下载功能.当所有客户用模版录入好数据再上传到系统,后端对excel进行解析,然后再持久化到数据库. 概述: 此工具类的几大特点 1.基本导入导出

java poi excel 导入导出数据

背景:1.pringmvc 框架下 的excel 导入导出   2.OI 操作office. 页面代码: <div class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" aria-hidden="true"> <div class=&quo

java实现excel的导入导出(poi详解)[转]

java实现excel的导入导出(poi详解) 博客分类: java技术 excel导出poijava 经过两天的研究,现在对excel导出有点心得了.我们使用的excel导出的jar包是poi这个阿帕奇公司的一个项目,后来被扩充了.是比较好用的excel导出工具. 下面来认识一下这个它吧. 我们知道要创建一张excel你得知道excel由什么组成,比如说sheet也就是一个工作表格,例如一行,一个单元格,单元格格式,单元格内容格式…这些都对应着poi里面的一个类. 一个excel表格: HSS

[转]Java中导入、导出Excel

原文地址:http://blog.csdn.net/jerehedu/article/details/45195359 一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际的开发中,很多时候需要实现导入.导出Excel的应用. 目前,比较常用的实现Java导入.导出Excel的技术有两种Jakarta POI和Java Excel 下面我就分别讲解一