POI怎么和项目结合起来使用

POI是什么

  • POI提供API给Java程序对Microsoft Office格式档案读和写的功能
    • Microsoft Office是一套办公软件

 

POI怎么和项目结合起来使用

  • 第二步

  • 第三步

  • 下载完成将其解压,然后找到相关jar包,将其导入项目的lib目录下


导出普通的excel表

  • 前台

function downloadexcel(){

var v_movieform=document.getElementById("movieform");

v_movieform.action=" <%=request.getContextPath()%>/movie/downloadexcel.fh";

v_movieform.method="post";

v_movieform.submit();

}

 

b.后台

//查询所有电影

movielist=movieService.findAllMovie(movie);

//创建excel

////生成表

XSSFWorkbook wb = new XSSFWorkbook();

XSSFSheet sheet = wb.createSheet("电影列表");

//创建表头行

XSSFRow header = sheet.createRow(0);

//给表头行中的列赋值

header.createCell(0).setCellValue("电影名称");

header.createCell(1).setCellValue("电影类型");

header.createCell(2).setCellValue("电影地区");

header.createCell(3).setCellValue("电影评分");

header.createCell(4).setCellValue("上映时间");

header.createCell(5).setCellValue("电影年代");

//创建样式

XSSFCellStyle style = wb.createCellStyle();

//给样式添加日期格式 style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"));

//for循环将查询出来的值赋到excel中

for (int i = 0; i < movielist.size(); i++) {

Movie tomovie = movielist.get(i);

XSSFRow row = sheet.createRow(i+1);

XSSFCell movienameCell = row.createCell(0);

movienameCell.setCellValue(tomovie.getMovieName());

XSSFCell typecell = row.createCell(1);

typecell.setCellValue(tomovie.getMovieType().getTypeName());

XSSFCell areacell = row.createCell(2);

areacell.setCellValue(tomovie.getMovieArea().getAreaName());

XSSFCell scorecell = row.createCell(3);

scorecell.setCellValue(tomovie.getScore());

XSSFCell datecell = row.createCell(4);

datecell.setCellValue(tomovie.getShowDate());

//给这一列添加样式

datecell.setCellStyle(style);

XSSFCell agecell = row.createCell(5);

agecell.setCellValue(tomovie.getAge().getAgeName());

}

//导出excell

FileUtil.excelDownload(wb, getResponse());

 

 

 

导出带有样式的excel表

a.前台

function typeexcelstyle(){

var v_movieform=document.getElementById("movieform");

v_movieform.action="<%=request.getContextPath()%>/movie/typeexcelstyle.fh";

v_movieform.method="post";

v_movieform.submit();

}

 

b.后台

为了代码更清晰易懂将代码进行了重构

1. //查询所有电影

movielist=movieService.findAllMovie(movie);

//生成Excel

XSSFWorkbook wb = builExcel(movielist);(详细内容见一)

//下载

FileUtil.excelDownload(wb, getResponse());

一生成Excel

.private XSSFWorkbook builExcel(List<Movie> movielist) {

//生成表

XSSFWorkbook wb=new XSSFWorkbook();

XSSFSheet sheet = wb.createSheet("电影总数"+movielist.size());

//表头

builTitle(wb, sheet);(详细内容见二)

//构建header

builHeader(wb, sheet);(详细内容见三)

//构建主体

builbody(movielist, wb, sheet);(详细内容见四)

return wb;

}

二表头.

private void builTitle(XSSFWorkbook wb, XSSFSheet sheet) {

//添加样式

XSSFCellStyle titleStyle = wb.createCellStyle();

//合并单元格

CellRangeAddress titlecellrange = new CellRangeAddress(3,5,7,12);

sheet.addMergedRegion(titlecellrange);

//居中样式

titleStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);

titleStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);

//字体大小

XSSFFont titlefont=wb.createFont();

titlefont.setBold(true);

titlefont.setFontHeightInPoints((short) 22);

titleStyle.setFont(titlefont);

//背景颜色

titleStyle.setFillForegroundColor(HSSFColor.GREEN.index);

titleStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

//创建标题行

XSSFRow titlerow = sheet.createRow(3);

//创建标题列

XSSFCell titlecell = titlerow.createCell(7);

titlecell.setCellValue("电影列表");

titlecell.setCellStyle(titleStyle);

}

三构建header

.private void builHeader(XSSFWorkbook wb, XSSFSheet sheet) {

//构建header

XSSFRow headerrow = sheet.createRow(6);

//创建样式

XSSFCellStyle headerstyle = wb.createCellStyle();

//样式居中

headerstyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);

headerstyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);

//背景颜色

headerstyle.setFillForegroundColor(HSSFColor.RED.index);

headerstyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

String[] headerval={"电影名称","评分","上映时间","地区","类型","电影年代"};

int start=7;

int end=start+headerval.length;

for (int i = start; i < end; i++) {

XSSFCell headerCell = headerrow.createCell(i);

headerCell.setCellValue(headerval[i-start]);

headerCell.setCellStyle(headerstyle);

}

}

四构建主体

.private void builbody(List<Movie> movielist, XSSFWorkbook wb, XSSFSheet sheet) {

//创建样式

XSSFCellStyle bodystyle = wb.createCellStyle();

//修改日期格式

bodystyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"));

//创建样式

XSSFCellStyle warnstyle=wb.createCellStyle();

//改变背景颜色

warnstyle.setFillForegroundColor(HSSFColor.YELLOW.index);

warnstyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

//整合两个样式

XSSFCellStyle allstyle=wb.createCellStyle();

allstyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"));

allstyle.setFillForegroundColor(HSSFColor.YELLOW.index);

allstyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

//for循环赋值

for (int i = 0; i < movielist.size(); i++) {

Movie movieinfo = movielist.get(i);

XSSFRow bodyrow = sheet.createRow(i+7);

XSSFCell movienamecell = bodyrow.createCell(7);

movienamecell.setCellValue(movieinfo.getMovieName());

XSSFCell scorecell = bodyrow.createCell(8);

scorecell.setCellValue(movieinfo.getScore());

XSSFCell showdatecell = bodyrow.createCell(9);

showdatecell.setCellValue(movieinfo.getShowDate());

showdatecell.setCellStyle(bodystyle);

XSSFCell areacell = bodyrow.createCell(10);

areacell.setCellValue(movieinfo.getMovieArea().getAreaName());

XSSFCell typecell = bodyrow.createCell(11);

typecell.setCellValue(movieinfo.getMovieType().getTypeName());

XSSFCell agecell = bodyrow.createCell(12);

agecell.setCellValue(movieinfo.getAge().getAgeName());

if (movieinfo.getScore()<6) {

movienamecell.setCellStyle(warnstyle);

scorecell.setCellStyle(warnstyle);

showdatecell.setCellStyle(allstyle);

areacell.setCellStyle(warnstyle);

typecell.setCellStyle(warnstyle);

agecell.setCellStyle(warnstyle);

}

}

}

 

 

 

导出代样式分类型的excel表

  • 前台

    • function typeexcelstyle(){

var v_movieform=document.getElementById("movieform");

v_movieform.action="<%=request.getContextPath()%>/movie/typeexcelstyle.fh";

v_movieform.method="post";

v_movieform.submit();

}

  • 后台

    • public void typeexcelstyle(){

//查询类型

List<MovieType> querytypeall = movieTypeService.querytypeall();

//查询电影

movielist=movieService.findAllMovie(movie);

//生成excel

XSSFWorkbook wb = new XSSFWorkbook();

for (MovieType movieType : querytypeall) {

//调用类型相同电影的方法

List<Movie> findMovieListByType = findMovieListByType(movieType.getId(), movielist);(见内容五)

XSSFSheet sheet = wb.createSheet(movieType.getTypeName()+findMovieListByType.size()+"条");

(表头,header,主体 ,与 导出带有样式的excel表中二三四一样)

//表头

builTitle(wb, sheet);

//构建header

builHeader(wb, sheet);

//构建主体

builbody(findMovieListByType, wb, sheet);

}

//下载

FileUtil.excelDownload(wb, getResponse());

}

判断相同的类型的电影(电影的集合是从已经查询出来中的,不需要再次与数据库交汇)

private List<Movie> findMovieListByType(int typeid,List<Movie> movielist){

List<Movie> movieinfo=new ArrayList<>();

for (Movie movie : movielist) {

if (typeid==movie.getMovieType().getId()) {

movieinfo.add(movie);

}

}

return movieinfo;

}

 

 

 

导出代样式分地区的excel表

  • 前台

    • function areaexcelstyle(){

var v_movieform=document.getElementById("movieform");

v_movieform.action="<%=request.getContextPath()%>/movie/areaexcelstyle.fh";

v_movieform.method="post";

v_movieform.submit();

}

    • 后台
      • public void areaexcelstyle(){

//查询所有地区

List<MovieArea> queryareaall = movieAreaService.queryareaall();

//查询所有电影

movielist=movieService.findAllMovie(movie);

XSSFWorkbook wb = new XSSFWorkbook();

for (MovieArea area : queryareaall) {

// //调用地区相同电影的方法

List<Movie> findMovieListByArea = findMovieListByArea(area.getId(),movielist);(详细见六)

XSSFSheet sheet = wb.createSheet(area.getAreaName()+findMovieListByArea.size()+"条");

(表头,header,主体 ,与 导出带有样式的excel表中二三四一样)

//表头

builTitle(wb, sheet);

//构建header

builHeader(wb, sheet);

//构建主体

builbody(findMovieListByArea, wb, sheet);

}

//下载

FileUtil.excelDownload(wb, getResponse());

}

判断相同的地区的电影(电影的集合是从已经查询出来中的,不需要再次与数据库交汇)

private List<Movie> findMovieListByArea(int areaid,List<Movie> movielist){ List<Movie> moviearr=new ArrayList<>();

for (Movie movie : movielist) {

if (areaid==movie.getMovieArea().getId()) {

moviearr.add(movie);

}

}

return moviearr;

}

POI在使用过程中的注意事项

1.前台

注意:1.movieform与from表单中的id一致

2.由于导出需要下载所以不能使用ajax发送请求

3.条件查询需要使用from表单发送请求,并且from表单中的元素都需

要加上name属性

 

2.后台

注意:1.excel表中的下标从0开始

2.给列调节样式不能够使用一个以上的样式否则会产生覆盖

3.excel表中的单元格中的数据是有数据类型的,默认情况下字符

串靠左,数字靠右

4.如果将文件写到硬盘上就用FileOutPutStrema如果将文件直接

写到客户端浏览器就用response.getOutPutStream

5.如果需要将服务器端相应的数据发送给客户端浏览器则需要

response这个核心对象

posted @ 2019-07-08 13:40  养九  阅读(281)  评论(0编辑  收藏  举报