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

效果图:

实现

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. org.eclipse.jdi.TimeoutException:Timeout occurred while waiting for packet 1983.occurred

    eclipse 增大junit内存配置 现象:eclipse在junit测试的时候出现如下错误 org.eclipse.jdi.TimeoutException:Timeout occurred wh ...

  2. 开发高性能JAVA应用程序基础(内存篇)

    虽然Java的垃圾回收和当前高配置的服务器可以让程序员大部分时间忘掉OutOfMemoryError的存在,但是访问量增大后频繁的GC会额外消耗CPU (使用top查看结果为us值高),系统响应速度下 ...

  3. Gradient Boosted Regression

    3.2.4.3.6. sklearn.ensemble.GradientBoostingRegressor class sklearn.ensemble.GradientBoostingRegress ...

  4. hdu_2670Girl Love Value(dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2670 Girl Love Value Time Limit: 2000/1000 MS (Java/O ...

  5. c# tolist() 浅析

    在介绍tolist()的时候我先个大家介绍一下linq的延迟加载: var products = new List<Product> { , Category = "Electr ...

  6. [国嵌攻略][136][DM9000网卡驱动深度分析]

    网卡初始化 1.分配描述结构,alloc_etherdev 2.获取平台资源,platform_get_resource 2.1.在s3c_dm9k_resource中有相关的资源 2.2.add地址 ...

  7. 初窥React Native

    这两天在学习react native,被虐得布耀布耀的,运行一个hello world花了一天时间(手动捂脸). 由于是跟着官网走,所以一开始便是开发环境的搭建.其他的就不说了(详情见 React N ...

  8. Java排序算法分析与实现:快排、冒泡排序、选择排序、插入排序、归并排序(二)

    一.概述: 上篇博客介绍了常见简单算法:冒泡排序.选择排序和插入排序.本文介绍高级排序算法:快速排序和归并排序.在开始介绍算法之前,首先介绍高级算法所需要的基础知识:划分.递归,并顺带介绍二分查找算法 ...

  9. UE4 分层材质 Layerd Materials

    在UE4中最正规的材质制作流程就像: 建立新材质,并将其调整为达至完美. 在内容浏览器中,建立新材质函数,并将所有材质函数节点复制/粘贴到其中. 将网络连接到新的 Make Material Attr ...

  10. 从零开始学习前端JAVASCRIPT — 1、JavaScript基础

    1:定义:javascript是一种弱类型.动态类型.解释型的脚本语言. 弱类型:类型检查不严格,偏向于容忍隐式类型转换. 强类型:类型检查严格,偏向于不容忍隐式类型转换. 动态类型:运行的时候执行类 ...