Java 使用jxl类库以流的方式实现Excel导入导出
2016-12-07 14:20
956 查看
本文以输入输出流的方式导入导出Excel文件。框架背景为SpringMVC,Excel表格的工具类库用的是jxl-2.6.12.jar,非常好用,本文非常简单得示例了如何使用该类库。
Workbook.createWorkbook()参数可以是一个输出流,也可以是一个IO的File对象。当参数为File对象时,即在本地路径创建Excel文件,然后写入文件内容,实现导出。
Workbook.getWorkbook()参数可以是一个输入流,也可以是一个IO的File对象。当参数为File对象时,即读取本地Excel文件,实现导入。
以上例子都是通过流的方式实现导入导出,无需在服务器创建或保留Excel文件,如此将不会占用磁盘空间。
package com.hxj.excel.controller; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; @Controller @RequestMapping("/aaa") public class ImportExcelController { private static Logger logger = LoggerFactory.getLogger(ImportExcelController.class); @ResponseBody @RequestMapping("/bbb") public void importExcelMethod(@RequestParam(value = "file")MultipartFile file){ Long fileSize = file.getSize(); if(fileSize > 1024*1024){ logger.error("文件大小不能超过1M"); } String suffix= file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); if (!suffix.equals(".xls") && !suffix.equals(".xlsx")){ logger.error("文件类型错误"); } try { //以输入流创建一个excel工作簿 Workbook workbook = Workbook.getWorkbook(file.getInputStream()); //取第一个工作表,getRows取到工作表的行数 Sheet sheet = workbook.getSheet(0); for(int i = 0;i<sheet.getRows();i++){ //取第i行第1列的内容 String firstCell = sheet.getCell(0,i).getContents(); //取第i行第2列的内容 String secondCell = sheet.getCell(1,i).getContents(); logger.info(firstCell+" "+secondCell); } } catch (IOException e) { e.printStackTrace(); } catch (BiffException e) { e.printStackTrace(); } } }
package com.hxj.excel.controller; import jxl.Workbook; import jxl.format.Alignment; import jxl.write.*; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLEncoder; @Controller @RequestMapping("/xxx") public class ExportExcelController { @ResponseBody @RequestMapping("/yyy") public void exportExcelMethod(HttpServletRequest request,HttpServletResponse response){ //创建输出流 ServletOutputStream outputStream = null; try { outputStream = response.getOutputStream(); //创建excel工作簿 WritableWorkbook workbook = Workbook.createWorkbook(outputStream); //创建一个工作表 WritableSheet sheet = workbook.createSheet("工作表一",0); //设置字体 WritableFont font = new WritableFont(WritableFont.createFont("宋体"),13,WritableFont.NO_BOLD,false); //设置样式 WritableCellFormat format = new WritableCellFormat(font); format.setAlignment(Alignment.CENTRE);//居中对齐 //设置表头(第一行第一第二列) sheet.setColumnView(0,25); sheet.addCell(new Label(0,0,"姓名",format)); sheet.addCell(new Label(1,0,"部门",format)); //插入内容(第二,三行第一第二列) sheet.addCell(new Label(0,1,"张三",format)); sheet.addCell(new Label(1,1,"人事部",format)); sheet.addCell(new Label(0,2,"李四",format)); sheet.addCell(new Label(1,2,"财务部",format)); //导出文件名 String filename = "WorkersList.xls"; //解决中文编码问题 String agent = request.getHeader("User-Agent").toLowerCase(); if(agent.indexOf("chrome")>0 || agent.indexOf("firefox")>0){ filename = new String(filename.getBytes("UTF-8"),"ISO-8859-1"); }else{ filename = URLEncoder.encode(filename,"UTF-8"); } //设置响应 response.setContentType("text/xls;charset=utf-8"); response.setHeader("Pragma","public"); response.setHeader("Cache-Control","max-age=30"); response.setHeader("Content-disposition","attachment;filename="+filename); //写入工作簿,关闭工作簿 workbook.write(); workbook.close(); outputStream.flush(); } catch (Exception e) { e.printStackTrace(); }finally { if(null != outputStream){ try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
Workbook.createWorkbook()参数可以是一个输出流,也可以是一个IO的File对象。当参数为File对象时,即在本地路径创建Excel文件,然后写入文件内容,实现导出。
Workbook.getWorkbook()参数可以是一个输入流,也可以是一个IO的File对象。当参数为File对象时,即读取本地Excel文件,实现导入。
以上例子都是通过流的方式实现导入导出,无需在服务器创建或保留Excel文件,如此将不会占用磁盘空间。
相关文章推荐
- Spring MVC @ResponseBody返回中文字符串乱码问题
- 3、MyEclipse中hadoop环境配置
- cmake + eclipse
- Java-NIO
- JDK动态代理和CGLIB
- Spring-Struts-Mybatis整合
- UNIX时间戳的应用-JAVA
- 002_JavaSE笔记:单例模式
- 使用Spring Boot开发Restful程序
- Struts1 和 Struts2 是否是单例
- Spring 4 使用Freemarker模板发送邮件&添加附件
- 6.多线程文件拷贝
- Spring Boot Web项目之参数绑定
- 文件AES加密、解密
- 阅读Selenium源码——从FirefoxDriver类实现说起
- SpringMVC中servletFileUpload.parseRequest(request)解析为空获取不到数据问题
- Ubuntu12.04安装JDK8和Eclipse
- 5.文件拷贝
- 18.Java泛型
- spring中的注解