ι 版权声明:本文为博主原创文章,未经博主允许不得转载。

效果图:

实现

1.在pom中添加依赖:

    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>

2.ExcelUtil工具类:

package com.feicuiedu.survey.util;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.List;
import java.util.Map; /**
* Created by Bella on 2018/2/5.
*/
public class ExcelUtil {
/**
* 创建excel文档,
* list 数据
* @param keys list中map的key数组集合
* @param columnNames excel的列名
* */
public static HSSFWorkbook createWorkBook(List<Map<String, Object>> list, String []keys, String columnNames[]) {
// 创建excel工作簿
HSSFWorkbook wb = new HSSFWorkbook();
// 创建第一个sheet页,并命名
HSSFSheet sheet = wb.createSheet(list.get(0).get("sheetName").toString());
// 设置列宽
for(int i=0;i<keys.length;i++){
//最后一列为附件URL地址,列宽设置大一些
if(i==(keys.length-1)){
sheet.setColumnWidth((short) i, (short) (200*120));
}else{
sheet.setColumnWidth((short) i, (short) (50*60));
}
} // 创建第一行,并设置其单元格格式
HSSFRow row = sheet.createRow((short) 0);
row.setHeight((short)500);
// 单元格格式(用于列名)
HSSFCellStyle cs = wb.createCellStyle();
HSSFFont f = wb.createFont();
f.setFontName("宋体");
f.setFontHeightInPoints((short) 10);
f.setBold(true);
cs.setFont(f);
cs.setAlignment(HorizontalAlignment.CENTER);// 水平居中
cs.setVerticalAlignment(VerticalAlignment.CENTER);// 垂直居中
cs.setLocked(true);
cs.setWrapText(true);//自动换行
//设置列名
for(int i=0;i<columnNames.length;i++){
HSSFCell cell = row.createCell(i);
cell.setCellValue(columnNames[i]);
cell.setCellStyle(cs);
} //设置首行外,每行每列的值(Row和Cell都从0开始)
for (short i = 1; i < list.size(); i++) {
HSSFRow row1 = sheet.createRow((short) i);
String flag = "";
//在Row行创建单元格
for(short j=0;j<keys.length;j++){
HSSFCell cell = row1.createCell(j);
cell.setCellValue(list.get(i).get(keys[j]) == null?" ": list.get(i).get(keys[j]).toString());
if(list.get(i).get(keys[j])!=null){
if("优".equals(list.get(i).get(keys[j]).toString())){
flag = "优";
}else if("差".equals(list.get(i).get(keys[j]).toString())) {
flag = "差";
}
}
}
//设置该行样式
HSSFFont f2 = wb.createFont();
f2.setFontName("宋体");
f2.setFontHeightInPoints((short) 10);
if("优".equals(flag)){
HSSFCellStyle cellStyle = wb.createCellStyle();
cellStyle.setFont(f2);
cellStyle.setAlignment(HorizontalAlignment.CENTER);// 左右居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);// 上下居中
cellStyle.setLocked(true);
cellStyle.setWrapText(true);//自动换行
cellStyle.setFillForegroundColor(HSSFColor.HSSFColorPredefined.YELLOW.getIndex());// 设置背景色
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
//依次为每个单元格设置样式
for(int m=0;m<keys.length;m++){
HSSFCell hssfCell = row1.getCell(m);
hssfCell.setCellStyle(cellStyle);
}
}else if("差".equals(flag)){
HSSFCellStyle cellStyle2 = wb.createCellStyle();
cellStyle2.setFont(f2);
cellStyle2.setAlignment(HorizontalAlignment.CENTER);// 左右居中
cellStyle2.setVerticalAlignment(VerticalAlignment.CENTER);// 上下居中
cellStyle2.setLocked(true);
cellStyle2.setWrapText(true);//自动换行
cellStyle2.setFillForegroundColor(HSSFColor.HSSFColorPredefined.RED.getIndex());// 设置背景色
cellStyle2.setFillPattern(FillPatternType.SOLID_FOREGROUND);
for(int m=0;m<keys.length;m++){
HSSFCell hssfCell = row1.getCell(m);
hssfCell.setCellStyle(cellStyle2);
}
}else{
HSSFCellStyle cs2 = wb.createCellStyle();
cs2.setFont(f2);
cs2.setAlignment(HorizontalAlignment.CENTER);// 左右居中
cs2.setVerticalAlignment(VerticalAlignment.CENTER);// 上下居中
cs2.setLocked(true);
cs2.setWrapText(true);//自动换行
for(int m=0;m<keys.length;m++){
HSSFCell hssfCell = row1.getCell(m);
hssfCell.setCellStyle(cs2);
}
}
}
return wb;
} //生成并下载Excel
public static void downloadWorkBook(List<Map<String,Object>> list,
String keys[],
String columnNames[],
String fileName,
HttpServletResponse response) throws IOException{
ByteArrayOutputStream os = new ByteArrayOutputStream();
try {
ExcelUtil.createWorkBook(list,keys,columnNames).write(os);
} catch (IOException e) {
e.printStackTrace();
}
byte[] content = os.toByteArray();
InputStream is = new ByteArrayInputStream(content);
// 设置response参数
response.reset();
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition", "attachment;filename="+ new String((fileName + ".xls").getBytes(), "iso-8859-1"));
ServletOutputStream out = response.getOutputStream();
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(is);
bos = new BufferedOutputStream(out);
byte[] buff = new byte[2048];
int bytesRead;
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
} catch (final IOException e) {
throw e;
} finally {
if (bis != null)
bis.close();
if (bos != null)
bos.close();
}
}
}

3.service 接口:

    String export(HttpServletResponse response,
Integer regionid,
Integer schoolid,
Integer majorid,
String beginDate,
String endDate);

4.service 接口实现类:

    /**
* 导出Excel表
* @param regionid 大区id
* @param schoolid 校区id
* @param majorid 专业id
* @param beginDate 开始日期
* @param endDate 结束日期
* @return
*/
public String export(HttpServletResponse response,
Integer regionid,
Integer schoolid,
Integer majorid,
String beginDate,
String endDate){
try {
List<ProjectAuditListVo> projectAuditListVoList = projectAuditMapper.query(0,regionid,schoolid,majorid,null,beginDate,endDate,null,null);
String fileName="项目审核表";
List<Map<String,Object>> list=createExcelRecord(projectAuditListVoList);
String columnNames[] = {"大区","校区","专业","面授教师","在线教师","班级",
"项目所处阶段","作品人次","项目提交日期","项目得分",
"得分等级","原因","项目评价","附件"};//列名
String keys[] = {"regionName","schoolName","majorName","teacherName","onlineTeacherName",
"className","stage","workNum", "submitTime","score","rank","reason","evaluate","attachment",};//map中的key
ExcelUtil.downloadWorkBook(list,keys,columnNames,fileName,response);
} catch (IOException e) {
e.printStackTrace();
}
return "excel";
} /**
* 创建Excel表中的记录
* @param projectAuditListVoList
* @return
*/
private List<Map<String, Object>> createExcelRecord(List<ProjectAuditListVo> projectAuditListVoList){
List<Map<String, Object>> listmap = new ArrayList<Map<String, Object>>();
try {
Map<String, Object> map = new HashMap<String, Object>();
map.put("sheetName", "sheet1");
listmap.add(map);
for (int j = 0; j < projectAuditListVoList.size(); j++) {
ProjectAuditListVo projectAuditListVo=projectAuditListVoList.get(j);
Map<String, Object> mapValue = new HashMap<String, Object>();
mapValue.put("regionName",projectAuditListVo.getRegionName());
mapValue.put("schoolName",projectAuditListVo.getSchoolName());
mapValue.put("majorName",projectAuditListVo.getMajorName());
mapValue.put("teacherName",projectAuditListVo.getTeacherName());
mapValue.put("onlineTeacherName",projectAuditListVo.getOnlineTeacherName());
mapValue.put("className",projectAuditListVo.getClassName());
mapValue.put("stage",projectAuditListVo.getStage());
mapValue.put("workNum",projectAuditListVo.getWorkNum());
mapValue.put("submitTime", DateTimeUtil.dateToStr(projectAuditListVo.getSubmitTime(),"yyyy-MM-dd"));
mapValue.put("score",projectAuditListVo.getScore());
mapValue.put("rank",projectAuditListVo.getRank());
mapValue.put("reason",projectAuditListVo.getReason());
mapValue.put("evaluate",projectAuditListVo.getEvaluate());
String attachmentURL = projectAuditListVo.getAttachment()==null?"无":FileUtil.getUploadPath()+projectAuditListVo.getAttachment();
mapValue.put("attachment",attachmentURL);
listmap.add(mapValue);
}
} catch (Exception e) {
e.printStackTrace();
}
return listmap;
}

其中,

List<ProjectAuditListVo> projectAuditListVoList = projectAuditMapper.query(0,regionid,schoolid,majorid,null,beginDate,endDate,null,null);

为调用dao 层方法,获取 Excel中数据源。此处,dao层方法省略

5.controller层:

    @RequestMapping(value = "/export",produces = {"application/vnd.ms-excel;charset=UTF-8"})
@ResponseBody
public String export(HttpServletResponse response,
@RequestParam(value = "regionid",required = false) Integer regionid,
@RequestParam(value = "schoolid",required = false) Integer schoolid,
@RequestParam(value = "majorid",required = false) Integer majorid,
@RequestParam(value = "beginDate",required = false) String beginDate,
@RequestParam(value = "endDate",required = false) String endDate){ return iProjectAuditService.export(response,regionid,schoolid,majorid,beginDate,endDate);
}

6.访问export接口,则会自动下载生成的Excel文件至本地。Excel文件效果图如上图所示。

【原创】POI 生成Excel文件并下载的更多相关文章

  1. java利用poi生成excel文件后下载本地

    1.该功能需要poi的jar包,链接: http://pan.baidu.com/s/1migAtNq 密码: 38fx. 2.首先新建一个实体类,用以存放单个数据 public class Test ...

  2. POI生成EXCEL文件

    POI生成EXCEL文件 一.背景 根据指定格式的JSON文件生成对应的excel文件,需求如下 支持多sheet 支持单元格合并 支持插入图片 支持单元格样式可定制 需要 标题(title),表头( ...

  3. Java 利用 poi 生成 Excel文件的通用例子

    在用java 写数据库应用的时候, 通常会生成各种报表,而这些报表可能会被导出为各种格式的文件,比如Excel文档,pdf 文档等等. 今天先做了一个生成Excel 文档的例子,主要解决以下问题: 生 ...

  4. POI生成EXCEL文件(字体、样式、单元格合并、计算公式)

    创建一个封装类: package com.jason.excel; import java.io.FileNotFoundException; import java.io.FileOutputStr ...

  5. java实现点击查询数据生成excel文件并下载

    须先导入关键maven包 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi& ...

  6. java生成Excel文件,下载

    pom引入poi的maven依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId> ...

  7. python通过xlwt模块直接在网页上生成excel文件并下载

    urls: from django.conf.urls import url, include from . import views urlpatterns = [ ... url(r'^domai ...

  8. 使用POI生成Excel文件,可以自动调整excel列宽

    //autoSizeColumn()方法自动调整excel列宽 importjava.io.FileOutputStream; importorg.apache.poi.hssf.usermodel. ...

  9. Jquery的一键上传组件OCUpload及POI解析Excel文件

    第一步:将js文件引入页面 <script type="text/javascript" src="${pageContext.request.contextPat ...

随机推荐

  1. 线性表的链式存储结构的实现及其应用(C/C++实现)

    存档----------- #include <iostream.h> typedef char ElemType; #include "LinkList.h" voi ...

  2. 【Java学习笔记之十三】初探Java面向对象的过程及代码实现

    理解Java面向对象的重要知识点: 一. 类,对象 类?首先举一个例子:小李设计了一张汽车设计图,然后交给生产车间来生产汽车,有黑色的.红色的.白色的... 这里,汽车设计图就是我们说的类(class ...

  3. HDU 2639 Bone Collector II(01背包变形【第K大最优解】)

    Bone Collector II Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  4. poj_2195Going Home(最小费用最大流)

    poj_2195Going Home(最小费用最大流) 标签: 最小费用最大流 题目链接 题意: 有n*m的矩阵,H表示这个点是一个房子,m表示这个点是一个人,现在每一个人需要走入一个房间,已经知道的 ...

  5. net+Oracle开发过程中遇到的小问题

    最新的项目开始使用Oracle后,5个月之间遇到一些在SqlServer中没有遇到的问题,这里记录并贴上一些常用的解决办法. Oracle相关 一.数据库不同版本还原: 刚开始我们一直使用Oracle ...

  6. vuex使用心得分享(填坑)

    今天我们简单说一下vuex的使用,vuex是什么呢,相当于react的redux,如果项目使用数据过多的话,直接管理是非常不方便的,那么采用vuex,那些繁琐的问题就迎刃而解了,首先我们先看看官方对v ...

  7. Oracle_insert_delete_update

    Oracle_insert_delete_update --复制表格的结构 create table temp as (select * from emp where 1=2); select * f ...

  8. qq客服代码实现过程

    引入css,jsimages,将index.html中的qq聊天代码部分和返回顶部-部分放在head.html文件中, 将文中圈中部分删除,否则影响整个页面的样式:

  9. spring boot项目编译出来的jar包如何更改端口号

    执行的时候更改端口即可 . java -Dserver.port=9999 -jar boot.jar

  10. CPU频率

    CPU频率 CPU频率,就是CPU的时钟频率,简单说是CPU运算时的工作的频率(1秒内发生的同步脉冲数)的简称. 概念 CPU频率,就是CPU的时钟频率,简单说是CPU运算时的工作的频率(1秒内发生的 ...