把数据用poi导出为excel

 

前端请求为: window.open(path+‘/researchlist/getAllListByExcel.html?id=‘+id); 

使用window.open()方式进行请求

用的jar包:

package com.mydoip.kx.research.service.impl;
import java.io.OutputStream;

import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.awt.Color;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

//单元格样式
private XSSFCellStyle getTitleStyle(XSSFWorkbook workBook) {
XSSFCellStyle commonStyle = workBook.createCellStyle();//公共样式
commonStyle.setWrapText(true);//自动换行
commonStyle.setAlignment(HorizontalAlignment.CENTER);//水平居中
commonStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中
XSSFCellStyle style2 = workBook.createCellStyle();//第二行表头的样式
style2.cloneStyleFrom(commonStyle);
XSSFFont font2 = workBook.createFont();
font2.setFontName("宋体");
font2.setFontHeightInPoints((short) 11);
style2.setFont(font2);
return style2;
}
//数据样式
private XSSFCellStyle getContentStyle(XSSFWorkbook workBook) {
XSSFCellStyle styleContent = workBook.createCellStyle();//数据的样式
XSSFCellStyle commonStyle = workBook.createCellStyle();//公共样式
commonStyle.setWrapText(true);//自动换行
commonStyle.setAlignment(HorizontalAlignment.CENTER);//水平居中
commonStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中
styleContent.cloneStyleFrom(commonStyle);
XSSFFont font3 = workBook.createFont();
font3.setFontName("宋体");
font3.setFontHeightInPoints((short) 11);
styleContent.setFont(font3);
return styleContent;
}

/**
* 导出excel (HSSFWorkbook)
* @throws Exception
*/
public void exportExcel(HttpServletRequest request, HttpServletResponse response,String id) throws Exception {
XSSFWorkbook workBook = new XSSFWorkbook();
CellStyle styleContent=getContentStyle(workBook);
CellStyle style2=getTitleStyle(workBook);
String tableName="调研计划";
//创建sheet
XSSFSheet sheet = workBook.createSheet(tableName);
//标题
{
//创建表头,第一行
XSSFRow row = sheet.createRow(0);
row.setHeight((short) 700);
//第一行的第一列:表头独占一行
XSSFCell cell = row.createCell(0);
cell.setCellValue("调研计划情况一览表");
cell.setCellStyle(style2);
// 合并
//0代表第一行起始值,0代表第一行结束值,0代表第一行第一列,8代表第一行共有7个单元格
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 8));
//创建表头,第二行
XSSFRow row1 = sheet.createRow(1);
row1.setHeight((short) 700);
//每列的title
String[] row_first = {"调研对象", "调研对象类型","调研主题", "调研方式", "调研地点", "建议出席领导", "发起处室", "参与处室", "发起时间"};
for (int i = 0; i < row_first.length; i++) {
XSSFCell cell1 = row1.createCell(i);
//赋值给第二行的每列
cell1.setCellValue(row_first[i]);
cell1.setCellStyle(style2);
//注意:给每个单元格赋值不用合并操作
//sheet.addMergedRegion(new CellRangeAddress(1, 1, i, i+1));
}
Map<String,Object> map = new HashMap<String,Object>();
List<ResearchCommonModelForList> tableList =researchListDao.getAllListByExcel(id);
List<String> list=new ArrayList<String>();
Map<Integer,List<String>> maps=new HashMap();
int rowNum=2;
for(int i=0;i<tableList.size();i++) {
//循环数据的长度,并依次创建数据长度的行数并给予赋值
XSSFRow rows = sheet.createRow(rowNum++);
rows.setHeight((short) 700);
for(int j=0;j<9;j++) {
XSSFCell cells0= rows.createCell(j);
cells0.setCellStyle(style2);
//每一个列值对应一个列标题
switch(j) {
case 0:
cells0.setCellValue(tableList.get(i).getPeopleName());
break;
case 1:
cells0.setCellValue(tableList.get(i).getPeopleTypeName());
break;
case 2:
cells0.setCellValue(tableList.get(i).getTitle());
break;
case 3:
cells0.setCellValue(tableList.get(i).getWayName());
break;
case 4:
cells0.setCellValue(tableList.get(i).getAddress());
break;
case 5:
cells0.setCellValue(tableList.get(i).getLdName());
break;
case 6:
cells0.setCellValue(tableList.get(i).getCreateDeptName());
break;
case 7:
cells0.setCellValue(tableList.get(i).getCsName());
break;
case 8:
if(tableList.get(i).getCompleteDate()!=null) {
String Sdate= tableList.get(i).getCompleteDate().toString();
String s=Sdate.split(" ")[0];
s.replace("\\", "-");
//list.add(s+"\t");
cells0.setCellValue(s);
}
break;
}

}

}
//下载的表名
String fileName = tableName+".xlsx";;
//请求的固定格式
String nameStr = new String(fileName.getBytes("UTF-8"), "ISO8859-1") + "";
if (request.getHeader("User-Agent").toUpperCase()
.indexOf("MSIE") > 0) {
nameStr = URLEncoder.encode(fileName, "UTF-8");// IE浏览器
}
response.setContentType("application/vnd.ms-excel;charset=utf-8");
OutputStream os = response.getOutputStream();
response.setHeader("Content-Disposition", "attachment; filename=" + nameStr);
workBook.write(os);
os.flush();
os.close();
}

}

把数据用poi导出为excel

上一篇:vue 生产环境开启 vue-devtools


下一篇:leetcode 861. 翻转矩阵后的得分