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

相关文章

如何解决Spring MVC中响应乱码问题

《如何解决SpringMVC中响应乱码问题》:本文主要介绍如何解决SpringMVC中响应乱码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC最新响应中乱码解决方式以前的解决办法这是比较通用的一种方法总结Spring MVC最新响应中乱码解

Java报NoClassDefFoundError异常的原因及解决

《Java报NoClassDefFoundError异常的原因及解决》在Java开发过程中,java.lang.NoClassDefFoundError是一个令人头疼的运行时错误,本文将深入探讨这一问... 目录一、问题分析二、报错原因三、解决思路四、常见场景及原因五、深入解决思路六、预http://www

Java常用注解扩展对比举例详解

《Java常用注解扩展对比举例详解》:本文主要介绍Java常用注解扩展对比的相关资料,提供了丰富的代码示例,并总结了最佳实践建议,帮助开发者更好地理解和应用这些注解,需要的朋友可以参考下... 目录一、@Controller 与 @RestController 对比二、使用 @Data 与 不使用 @Dat

java streamfilter list 过滤的实现

《javastreamfilterlist过滤的实现》JavaStreamAPI中的filter方法是过滤List集合中元素的一个强大工具,可以轻松地根据自定义条件筛选出符合要求的元素,本文就来... 目录1. 创建一个示例List2. 使用Stream的filter方法进行过滤3. 自定义过滤条件1. 定

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro

Java强制转化示例代码详解

《Java强制转化示例代码详解》:本文主要介绍Java编程语言中的类型转换,包括基本类型之间的强制类型转换和引用类型的强制类型转换,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录引入基本类型强制转换1.数字之间2.数字字符之间引入引用类型的强制转换总结引入在Java编程语言中,类型转换(无论

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

SpringCloud之consul服务注册与发现、配置管理、配置持久化方式

《SpringCloud之consul服务注册与发现、配置管理、配置持久化方式》:本文主要介绍SpringCloud之consul服务注册与发现、配置管理、配置持久化方式,具有很好的参考价值,希望... 目录前言一、consul是什么?二、安装运行consul三、使用1、服务发现2、配置管理四、数据持久化总