java使用jxls导出excel功能

在java的开发里,导出excel功能会经常遇到的,而jxls框架提供了很大的方便.
jxls官网:http://jxls.sourceforge.net/,官网的下载包里面也提供详细的文档说明.
下文提供思路,主要以web项目导出excel来举例jxls用法,文末也贴一下java项目导出excel功能(这个简单一点)
直接贴关键代码(其它关于怎么用java config方式的spring mvc不做说明)

1.引用jxls依赖

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <dependency>  
  2.     <groupId>net.sf.jxls</groupId>  
  3.     <artifactId>jxls-core</artifactId>  
  4.     <version>1.0.5</version>  
  5. </dependency>  
2.EmployeeController.java

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.exam.web;  
  2. import com.exam.domain.Employee;  
  3. import net.sf.jxls.transformer.XLSTransformer;  
  4. import org.apache.poi.openxml4j.exceptions.InvalidFormatException;  
  5. import org.apache.poi.ss.usermodel.Workbook;  
  6. import org.springframework.stereotype.Controller;  
  7. import org.springframework.web.bind.annotation.RequestMapping;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10. import java.io.*;  
  11. import java.util.ArrayList;  
  12. import java.util.HashMap;  
  13. import java.util.List;  
  14. import java.util.Map;  
  15. @Controller  
  16. @RequestMapping("/employee")  
  17. public class EmployeeController {  
  18.     /** 
  19.      * 这里接管了response,我们自己把response flush出去,所以返回类型是void(不要用什么String,否则会报响应已提交过的异常哦) 
  20.      */  
  21.     @RequestMapping("/export")  
  22.     public void export(HttpServletRequest request,HttpServletResponse response){  
  23.         String templateFileName= request.getServletContext().getRealPath("/") + "/resources/templateFileName.xls";  
  24.         String destFileName= "destFileName.xls";  
  25.         //模拟数据  
  26.         List<Employee> staff = new ArrayList<Employee>();  
  27.         staff.add(new Employee("Derek"3530000.30));  
  28.         staff.add(new Employee("Elsa"2815000.15));  
  29.         staff.add(new Employee("Oleg"3223000.25));  
  30.         Map<String,Object> beans = new HashMap<String,Object>();  
  31.         beans.put("employees", staff);  
  32.         XLSTransformer transformer = new XLSTransformer();  
  33.         InputStream in=null;  
  34.         OutputStream out=null;  
  35.         //设置响应  
  36.         response.setHeader("Content-Disposition""attachment;filename=" + destFileName);  
  37.         response.setContentType("application/vnd.ms-excel");  
  38.         try {  
  39.             in=new BufferedInputStream(new FileInputStream(templateFileName));  
  40.             Workbook workbook=transformer.transformXLS(in, beans);  
  41.             out=response.getOutputStream();  
  42.             //将内容写入输出流并把缓存的内容全部发出去  
  43.             workbook.write(out);  
  44.             out.flush();  
  45.         } catch (InvalidFormatException e) {  
  46.             e.printStackTrace();  
  47.         } catch (IOException e) {  
  48.             e.printStackTrace();  
  49.         } finally {  
  50.             if (in!=null){try {in.close();} catch (IOException e) {}}  
  51.             if (out!=null){try {out.close();} catch (IOException e) {}}  
  52.         }  
  53.     }  
  54. }  
3.templateFileName.xls(内容是二进制,不容易贴出来)


这个JEXL语法和JSTL语法十分相似.


这里我们自己处理了Response,没必要交给spring的视图解析器.在返回响应前我们设置了响应的Header和ContentType以便客户端的浏览器解析为弹出下载.这里调用了transformer.transformXLS(in, beans)方法得到一个Workbook,这方法会把模板(至于模板怎么写,详细看官方文档)先读入到输入流再处理,再把Workbook的内容写入到输出流发送出去.


上文源码:http://download.csdn.net/detail/xiejx618/7836191


如果不想使用上面的模板,还有一种更灵活自定义的方法(比如编码定义excel样式,动态增加多个sheet等等),也可以在Controller方法直接返回AbstractXlsView.下面是一个例子:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. @RequestMapping(value = "listXls",method = RequestMethod.GET)  
  2.     public View listXls() {  
  3.         List<User> list = getUsers();  
  4.         return new AbstractXlsView() {  
  5.             @Override  
  6.             protected void buildExcelDocument(Map<String, Object> model, Workbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception {  
  7.                 addSheet(workbook.createSheet("UserStatistics1"), list.subList(050));//不包括第50个  
  8.                 addSheet(workbook.createSheet("UserStatistics2"), list.subList(50,list.size()));  
  9.             }  
  10.         };  
  11.     }  
  12.   
  13.     private List<User> getUsers() {  
  14.         List<User> list = new ArrayList<>();  
  15.         for (int i = 0; i < 103; i++) {  
  16.             User user = new User();  
  17.             user.setUsername("name" + i);  
  18.             user.setPassword("pwd" + i);  
  19.             user.setId((long) i);  
  20.             list.add(user);  
  21.         }  
  22.         return list;  
  23.     }  
  24.   
  25.     private void addSheet(Sheet sheet, List<User> list) {  
  26.         int rowNum=0;  
  27.         Row row0 = sheet.createRow(rowNum++);  
  28.         row0.createCell(0).setCellValue("ID");  
  29.         row0.createCell(1).setCellValue("Username");  
  30.         row0.createCell(2).setCellValue("Password");  
  31.         row0.createCell(3).setCellValue("Height");  
  32.         for (User user : list) {  
  33.             Row row = sheet.createRow(rowNum++);  
  34.             row.createCell(0).setCellValue(user.getId());  
  35.             row.createCell(1).setCellValue(user.getUsername());  
  36.             row.createCell(2).setCellValue(user.getPassword());  
  37.             row.createCell(3).setCellValue(user.getHeight());  
  38.         }  
  39.     }  


顺便贴一下java项目(不是web项目)的例子源码:http://download.csdn.net/detail/xiejx618/7836227

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Jxls 是一个开源的 Java 库,用于导出 Excel 文件,它可以在 Java 中非常方便地进行使用。下面是使用 Jxls 导出 Excel 的步骤: 1. 添加依赖 在 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>org.jxls</groupId> <artifactId>jxls-core</artifactId> <version>1.0.15</version> </dependency> ``` 2. 准备 Excel 模板 在 Excel 文件中准备好要导出的内容,包括表头和数据部分。可以在表格中使用 ${} 来标记需要动态替换的数据。 3. 准备数据 在 Java 代码中准备好要导出的数据,可以使用 List 或者 Map 等类型来保存数据。 4. 创建模板引擎 使用 Jxls 提供的模板引擎创建一个模板,可以使用以下代码: ```java InputStream is = new FileInputStream(new File("template.xls")); Workbook workbook = WorkbookFactory.create(is); Transformer transformer = TransformerFactory.createTransformer(workbook, outputStream); ``` 其中,“template.xls”是你准备好的 Excel 模板文件名,outputStream 是导出文件的输出流。 5. 填充数据 使用 Jxls 提供的 API 填充数据,可以使用以下代码: ```java Map<String, Object> beans = new HashMap<>(); beans.put("dataList", dataList); transformer.transformXLS(new HashMap<>(), beans); ``` 其中,“dataList”是你准备好的数据,transformer.transformXLS() 方法将会把数据填充到模板中。 6. 输出文件 使用 Jxls 提供的 API 输出文件,可以使用以下代码: ```java transformer.flush(); outputStream.close(); ``` 这样就可以将 Excel 文件导出到 outputStream 中了。 以上是使用 Jxls 导出 Excel 的基本步骤,你可以根据自己的需求进行更多的调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值