Java Web利用POI导出Excel例子(采用Spring mvc架构)

2024-09-04 12:48

本文主要是介绍Java Web利用POI导出Excel例子(采用Spring mvc架构),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

采用Spring mvc架构: 

Controller层代码如下 

[java]  view plain copy
  1. @Controller    
  2. public class StudentExportController{    
  3.     
  4.     @Autowired    
  5.     private StudentExportService studentExportService;    
  6.     
  7.     @RequestMapping(value = "/excel/export")    
  8.     public void exportExcel(HttpServletRequest request, HttpServletResponse response)     
  9.     throws Exception {    
  10.             
  11.         List<Student> list = new ArrayList<Student>();    
  12.         list.add(new Student(1000,"zhangsan","20"));    
  13.         list.add(new Student(1001,"lisi","23"));    
  14.         list.add(new Student(1002,"wangwu","25"));    
  15.         HSSFWorkbook wb = studentExportService.export(list);    
  16.         response.setContentType("application/vnd.ms-excel");    
  17.         response.setHeader("Content-disposition""attachment;filename=student.xls");    
  18.         OutputStream ouputStream = response.getOutputStream();    
  19.         wb.write(ouputStream);    
  20.         ouputStream.flush();    
  21.         ouputStream.close();    
  22.    }    
  23. }    

Service层代码如下: 

[java]  view plain copy
  1. @Service    
  2. public class StudentExportService {    
  3.     
  4.     String[] excelHeader = { "Sno""Name""Age"};    
  5.     public HSSFWorkbook export(List<Campaign> list) {    
  6.         HSSFWorkbook wb = new HSSFWorkbook();    
  7.         HSSFSheet sheet = wb.createSheet("Campaign");    
  8.         HSSFRow row = sheet.createRow((int0);    
  9.         HSSFCellStyle style = wb.createCellStyle();    
  10.         style.setAlignment(HSSFCellStyle.ALIGN_CENTER);    
  11.     
  12.         for (int i = 0; i < excelHeader.length; i++) {    
  13.             HSSFCell cell = row.createCell(i);    
  14.             cell.setCellValue(excelHeader[i]);    
  15.             cell.setCellStyle(style);    
  16.             sheet.autoSizeColumn(i);    
  17.         }    
  18.     
  19.         for (int i = 0; i < list.size(); i++) {    
  20.             row = sheet.createRow(i + 1);    
  21.             Student student = list.get(i);    
  22.             row.createCell(0).setCellValue(student.getSno());    
  23.             row.createCell(1).setCellValue(student.getName());    
  24.             row.createCell(2).setCellValue(student.getAge());    
  25.         }    
  26.         return wb;    
  27.     }    
  28. }    

前台的js代码如下: 

[javascript]  view plain copy
  1. <script>    
  2. function exportExcel(){    
  3.      location.href="excel/export";    
  4.      <!--这里不能用ajax请求,ajax请求无法弹出下载保存对话框-->    
  5.  }    
  6. </script>    

 

 

设置Excel样式以及注意点:

[java]  view plain copy
  1. String[] excelHeader = { "所属区域(地市)""机房""机架资源情况""""""""",  
  2.     """端口资源情况""""""""""""机位资源情况""""""设备资源情况",  
  3.     """""IP资源情况""""""""""网络设备数" };  
  4. String[] excelHeader1 = { """""总量(个)""空闲(个)""预占(个)""实占(个)",  
  5.     "自用(个)""其它(个)""总量(个) ""在用(个)""空闲(个)""总带宽(M)",  
  6.     "在用带宽(M)""空闲带宽(M)""总量(个)""在用(个)""空闲(个)""设备总量(个)",  
  7.     "客户设备(个)""电信设备(个)""总量(个)""空闲(个)""预占用(个)""实占用(个)",  
  8.     "自用(个)""" };  
  9. // 单元格列宽  
  10. int[] excelHeaderWidth = { 150120100100100100100100100,  
  11.     100100120120120120120120150150150120,  
  12.     120150150120150 };  
  13.   
  14. HSSFWorkbook wb = new HSSFWorkbook();  
  15. HSSFSheet sheet = wb.createSheet("机房报表统计");  
  16. HSSFRow row = sheet.createRow((int0);  
  17. HSSFCellStyle style = wb.createCellStyle();  
  18. // 设置居中样式  
  19. style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中  
  20. style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直居中  
  21.   
  22. // 设置合计样式  
  23. HSSFCellStyle style1 = wb.createCellStyle();  
  24. Font font = wb.createFont();  
  25. font.setColor(HSSFColor.RED.index);  
  26. font.setBoldweight(Font.BOLDWEIGHT_BOLD); // 粗体  
  27. style1.setFont(font);  
  28. style1.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中  
  29. style1.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直居中  
  30.   
  31. // 合并单元格  
  32. // first row (0-based) last row (0-based) first column (0-based) last  
  33. // column (0-based)  
  34. sheet.addMergedRegion(new CellRangeAddress(0100));  
  35. sheet.addMergedRegion(new CellRangeAddress(0111));  
  36. sheet.addMergedRegion(new CellRangeAddress(0027));  
  37. sheet.addMergedRegion(new CellRangeAddress(00813));  
  38. sheet.addMergedRegion(new CellRangeAddress(001416));  
  39. sheet.addMergedRegion(new CellRangeAddress(001719));  
  40. sheet.addMergedRegion(new CellRangeAddress(002024));  
  41. sheet.addMergedRegion(new CellRangeAddress(012525));  
  42. // 设置列宽度(像素)  
  43. for (int i = 0; i < excelHeaderWidth.length; i++) {  
  44.     sheet.setColumnWidth(i, 32 * excelHeaderWidth[i]);  
  45. }  
  46.   
  47. // 添加表格头  
  48. for (int i = 0; i < excelHeader.length; i++) {  
  49.     HSSFCell cell = row.createCell(i);  
  50.     cell.setCellValue(excelHeader[i]);  
  51.     cell.setCellStyle(style);  
  52. }  
  53. row = sheet.createRow((int1);  
  54. for (int i = 0; i < excelHeader1.length; i++) {  
  55.     HSSFCell cell = row.createCell(i);  
  56.     cell.setCellValue(excelHeader1[i]);  
  57.     cell.setCellStyle(style);  
  58. }  

 

 


注意点1:合并单元格    new CellRangeAddress(int,int,int,int)

first row (0-based) ,last row (0-based), first column (0-based),last column (0-based)

 

注意点2:合并单元格

String[] excelHeader = { "所属区域(地市)", "机房", "机架资源情况", "", "", "", "","", "端口资源情况", "", "", "", "", "", "机位资源情况", "", "", "设备资源情况","", "", "IP资源情况", "", "", "", "", "网络设备数" };

合并以后的单元格虽然是一个,但是仍然要保留其单元格内容,此处用空字符串代替,否则后续表头显示不出

 

注意点3:填充单元格

正确写法:

HSSFCell cell = row.createCell(i);

cell.setCellValue(excelHeader1[i]);

cell.setCellStyle(style);

错误写法:

row.createCell(i).setCellValue(excelHeader1[i]);

row.createCell(i).setCellStyle(style);

本人为了省一个HSSFCell对象,使用了错误写法,导致HSSFCell对象创建了2次,最后只保留了样式,而内容无法显示

这篇关于Java Web利用POI导出Excel例子(采用Spring mvc架构)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1136069

相关文章

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo