为了账号安全,请及时绑定邮箱和手机立即绑定

JavaWeb POI 导出Excel

标签:
Java JavaScript

刚开始实习没有多久,现在公司有个需求:将数据库当中的数据以Excel表格的形式导出来,以前从来没有做过这样子的东西,自己也不会做,怎么办?然后就上网找了一些资料,看看别人写的博客,搞了几个小时,终于搞出来了,顿时心里就有一点小小的成就感,好开心!也顺便把数据导出Excel的过程记录一下,给一些有需要的人参考一下,也给自己以后积累一点经验。

这里我要说明一下:我公司采用的是Spring,Struts2,MyBatis三大框架的,而且我公司项目做完之后的信息展示页面有点复杂,为了方便讲解,我这里采用的是Spring MVC的框架,用一个很简单的例子来说明一下怎么将数据以Excel表的格式导出来而已,过程如下:

Controller层代码如下:

    @Controller    
    public class ExportController{    

        @Autowired    
        private ExportService exportService;    

        @RequestMapping(value = "/export/excel")    
        public void exportExcel(HttpServletRequest request, HttpServletResponse response)     
        throws Exception {    

            //生成一个列表信息
            List<Student> list = new ArrayList<Student>();    
            list.add(new Student(0001,"童年","22","男"));    
            list.add(new Student(0002,"光光","23","女"));    
            list.add(new Student(0003,"丁丁","21","男"));  

            XSSFWorkbook wb = exportService.export(list);    
            response.setContentType("application/vnd.ms-excel");    
            response.setHeader("Content-disposition", "attachment;filename=student.xlsx");    
            OutputStream ouputStream = response.getOutputStream();    
            wb.write(ouputStream);    
            ouputStream.flush();    
            ouputStream.close();    
       }    
    }    

Service层代码如下:

    @Service    
    public class ExportService {    

        //定义表头
        String[] excelHeader = {"学号", "姓名", "年龄","性别"};    
        public XSSFWorkbook export(List<Campaign> list) {    
            //这里需要说明一个问题:如果是 Offices 2007以前的Excel版本,new的对象是:**HSSFWorkbook** ,Offices 2007以后的Excel版本new的对象才是XSSFWorkbook
            XSSFWorkbook wb = new XSSFWorkbook();  
            //生成一个工作表
            Sheet sheet = wb.createSheet("学生表");
            //生成第一行
            Row row = sheet.createRow((int) 0);    
            //生成单元格的样式style
            XSSFCellStyle style = wb.createCellStyle();    
            style.setAlignment(CellStyle.ALIGN_CENTER);

            for (int i = 0; i < excelHeader.length; i++) {
                //获取每一个单元格
                Cell cell = row.createCell(i);    
                //给单元格赋值
                cell.setCellValue(excelHeader[i]);    
                //设置单元格的样式
                cell.setCellStyle(style);
            }    

            for (int i = 0; i < list.size(); i++) {    
                //得到当前行数的下一行(row.getRowNum():得到当前行数)
                row = sheet.createRow(row.getRowNum() + 1);    
                Student student = list.get(i);    
                //赋值
                row.createCell(0).setCellValue(student.getSno());    
                row.createCell(1).setCellValue(student.getName());    
                row.createCell(2).setCellValue(student.getAge());    
                row.createCell(3).setCellValue(student.getSex());
            }    
            return wb;    
        }    
    }    

前台JS代码:

<script>
function exportExcel(){    
     location.href="export/excel";    
     <!--这里不能用ajax请求,ajax请求无法弹出下载保存对话框-->    
 }    
</script>

<a onclick="exportExcel()">导出Excel</a>

设置Excel表样式:

1. 生成一个XSSFCellStyle

    XSSFCellStyle cellStyle = wb.createCellStyle();

####2. 设置样式
``` java
    // 设置单元格的横向和纵向对齐方式,具体参数就不列了,参考HSSFCellStyle  
     cellStyle.setAlignment(HSSFCellStyle.ALIGN_JUSTIFY);  
     cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);  

     //设置单元格的填充方式,以及前景颜色和背景颜色 

     //设置填充方式(填充图案)  
     cellStyle.setFillPattern(HSSFCellStyle.DIAMONDS);  

     //设置前景色  
     cellStyle.setFillForegroundColor(HSSFColor.RED.index);  

     //设置背景颜色  
     cellStyle.setFillBackgroundColor(HSSFColor.LIGHT_YELLOW.index);  

     // 设置单元格底部的边框及其样式和颜色  
     cellStyle.setBorderBottom(HSSFCellStyle.BORDER_SLANTED_DASH_DOT);  
     cellStyle.setBottomBorderColor(HSSFColor.DARK_RED.index);  

3. 将样式应用于单元格,但有些样式只对单元格起作用

    cell.setCellStyle(cellStyle);

4. 合并单元格:

    //方面里面参数分别为:(起始行,结束行,起始列,结束列)
    sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 2));

设置单元格字体样式:

1. 创建XSSFFont对象:

    XSSFFont fontfontStyle = wb.createFont();

2. 设置字体样式:

    //设置字体样式  
    fontStyle.setFontName("宋体");    

    //设置字体高度  
    fontStyle.setFontHeightInPoints((short)20);    

    //设置字体颜色  
    font.setColor(HSSFColor.BLUE.index);  

    //设置粗体  
    fontStyle.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);  

    //设置斜体  
    font.setItalic(true);  

    //设置下划线  
    font.setUnderline(HSSFFont.U_SINGLE);  

3. 将字体设置到单元格样式:

    //字体也是单元格格式的一部分,所以也是属于CellStyle  

    // 将字体对象赋值给单元格样式对象  
    cellStyle.setFont(font);  

    // 将单元格样式应用于单元格  
    cell.setCellStyle(cellStyle);

本文也是参考了:Java Web利用POI导出Excel简单例子,和Java中使用poi导入、导出Excel 两篇文章,有兴趣的同学可以看一下!

点击查看更多内容
11人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消