zoukankan      html  css  js  c++  java
  • 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这个核心对象

  • 相关阅读:
    [Javascript] Broadcaster + Operator + Listener pattern -- 3 Stop with condition
    分布式事务科普(初识篇)
    分布式事务不理解?一次给你讲清楚!
    分布式事务,有解吗?
    分布式事务精华总结篇,实打实的干货!
    常用的分布式事务解决方案介绍有多少种?
    5种分布式事务解决方案优缺点对比
    Leaf——美团点评分布式ID生成系统
    MySQL分区总结
    互联网公司为啥基本不使用mysql分区表
  • 原文地址:https://www.cnblogs.com/ycq-qiang/p/11150696.html
Copyright © 2011-2022 走看看