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中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Spring AI集成DeepSeek的详细步骤

《SpringAI集成DeepSeek的详细步骤》DeepSeek作为一款卓越的国产AI模型,越来越多的公司考虑在自己的应用中集成,对于Java应用来说,我们可以借助SpringAI集成DeepSe... 目录DeepSeek 介绍Spring AI 是什么?1、环境准备2、构建项目2.1、pom依赖2.2

Spring Cloud LoadBalancer 负载均衡详解

《SpringCloudLoadBalancer负载均衡详解》本文介绍了如何在SpringCloud中使用SpringCloudLoadBalancer实现客户端负载均衡,并详细讲解了轮询策略和... 目录1. 在 idea 上运行多个服务2. 问题引入3. 负载均衡4. Spring Cloud Load

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

在 Spring Boot 中使用 @Autowired和 @Bean注解的示例详解

《在SpringBoot中使用@Autowired和@Bean注解的示例详解》本文通过一个示例演示了如何在SpringBoot中使用@Autowired和@Bean注解进行依赖注入和Bean... 目录在 Spring Boot 中使用 @Autowired 和 @Bean 注解示例背景1. 定义 Stud

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2