jxl导入导出实例
2014-10-31 20:32
232 查看
package com.tgb.test; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.write.Label; import jxl.write.Number; import jxl.write.WritableImage; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import org.apache.commons.lang3.math.NumberUtils; import org.junit.Test; //import org.junit.Test; public class JxlDemo { /** * 导入(导入到内存) */ @Test public void importExcel() { Workbook book = null; try { book = Workbook.getWorkbook(new File("D:/test/test.xls")); // 获得第一个工作表对象 Sheet sheet = book.getSheet(0); int rows=sheet.getRows(); int columns=sheet.getColumns(); // 遍历每行每列的单元格 for(int i=0;i<rows;i++){ for(int j=0;j<columns;j++){ Cell cell = sheet.getCell(j, i); String result = cell.getContents(); if(j==0){ System.out.print("姓名:"+result+" "); } if(j==1){ System.out.print("年龄:"+result+" "); } if((j+1)%2==0){ System.out.println(); } } } System.out.println("========"); // 得到第一列第一行的单元格 Cell cell1 = sheet.getCell(0, 0); String result = cell1.getContents(); System.out.println(result); System.out.println("========"); } catch (Exception e) { System.out.println(e); }finally{ if(book!=null){ book.close(); } } } /** * 导出(导出到磁盘) */ @Test public void exportExcel() { WritableWorkbook book = null; try { // 打开文件 book = Workbook.createWorkbook(new File("D:/test/test.xls")); // 生成名为"学生"的工作表,参数0表示这是第一页 WritableSheet sheet = book.createSheet("学生", 0); // 指定单元格位置是第一列第一行(0, 0)以及单元格内容为张三 Label label = new Label(0, 0, "张三"); // 将定义好的单元格添加到工作表中 sheet.addCell(label); // 保存数字的单元格必须使用Number的完整包路径 jxl.write.Number number = new jxl.write.Number(1, 0, 30); sheet.addCell(number); // 写入数据并关闭文件 book.write(); } catch (Exception e) { System.out.println(e); }finally{ if(book!=null){ try { book.close(); } catch (Exception e) { e.printStackTrace(); } } } } /** * 对象数据写入到Excel */ @Test public void writeExcel() { WritableWorkbook book = null; try { // 打开文件 book = Workbook.createWorkbook(new File("D:/test/stu.xls")); // 生成名为"学生"的工作表,参数0表示这是第一页 WritableSheet sheet = book.createSheet("学生", 0); List<Student> stuList=queryStudentList(); if(stuList!=null && !stuList.isEmpty()){ for(int i=0; i<stuList.size(); i++){ sheet.addCell(new Label(0, i, stuList.get(i).getName())); sheet.addCell(new Number(1, i, stuList.get(i).getAge())); } } // 写入数据并关闭文件 book.write(); } catch (Exception e) { System.out.println(e); }finally{ if(book!=null){ try { book.close(); } catch (Exception e) { e.printStackTrace(); } } } } /** * 读取Excel数据到内存 */ @Test public void readExcel() { Workbook book = null; try { // 打开文件 book = Workbook.getWorkbook(new File("D:/test/stu.xls")); // 获得第一个工作表对象 Sheet sheet = book.getSheet(0); int rows=sheet.getRows(); int columns=sheet.getColumns(); List<Student> stuList=new ArrayList<Student>(); // 遍历每行每列的单元格 for(int i=0;i<rows;i++){ Student stu = new Student(); for(int j=0;j<columns;j++){ Cell cell = sheet.getCell(j, i); String result = cell.getContents(); if(j==0){ stu.setName(result); } if(j==1){ stu.setAge(NumberUtils.toInt(result)); } if((j+1)%2==0){ stuList.add(stu); stu=null; } } } //遍历数据 for(Student stu : stuList){ System.out.println(String.format("姓名:%s, 年龄:%s", stu.getName(), stu.getAge())); } } catch (Exception e) { System.out.println(e); }finally{ if(book!=null){ try { book.close(); } catch (Exception e) { e.printStackTrace(); } } } } /** * 图片写入Excel,只支持png图片 */ @Test public void writeImg() { WritableWorkbook wwb = null; try { wwb = Workbook.createWorkbook(new File("D:/test/image.xls")); WritableSheet ws = wwb.createSheet("图片", 0); File file = new File("D:\\test\\png.png"); //前两位是起始格,后两位是图片占多少个格,并非是位置 WritableImage image = new WritableImage(1, 4, 6, 18, file); ws.addImage(image); wwb.write(); } catch (Exception e) { e.printStackTrace(); }finally{ if(wwb!=null){ try { wwb.close(); } catch (Exception e) { e.printStackTrace(); } } } } private List<Student> queryStudentList(){ List<Student> stuList=new ArrayList<Student>(); stuList.add(new Student("zhangsan", 20)); stuList.add(new Student("lisi", 25)); stuList.add(new Student("wangwu", 30)); return stuList; } public class Student { private String name; private int age; public Student() { } public Student(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } }
以上的代码简单明了的示范了JXL的导入导出功能,具体的导入导出工具类都是在此基础上建立起来的。在最近的信用办的项目中出现了一个小问题,就是导出Excel的文件名如果是中文就会出现乱码,所以需要做一些简单的处理,如下:(实例借鉴:/article/4621327.html)
response.setHeader("Content-disposition", "attachment; filename="+ new String( fileName.getBytes("gb2312"), "ISO8859-1" )+ ".xls");
更加详细健壮的设置如下:
fileName = new String(fileName.getBytes(),"iso-8859-1"); response.setCharacterEncoding("gb2312"); response.reset(); response.setContentType("application/OCTET-STREAM;charset=gb2312"); response.setHeader("pragma", "no-cache"); response.addHeader("Content-Disposition", "attachment;filename=\"" + fileName + ".xls\"");// 点击导出excle按钮时候页面显示的默认名称 workbook = Workbook.createWorkbook(response.getOutputStream());
了解这些基础知识,使用jxl导入导出Excel就轻而易举了。
相关文章推荐
- jxl导入导出实例
- java中使用jxl导入导出excel实例及其在spring mvc中的应用
- Spring (八) 使用jxl导入导出excel实例及其在spring mvc中的应用
- Oracle 单实例 迁移到 RAC 实例 -- 使用导出导入方法
- C# winform 导出导入Excel/Doc 完整实例教程 使用Aspose.Cells.dll——第三篇
- Oracle数据库exp imp按用户导出导入实例
- 从MySQL导出导入数据库的命令实例
- 从MySQL导出导入数据库的命令实例及设置会话字符编码
- Oracle 单实例 迁移到 RAC 实例 -- 使用导出导入方法
- C# winform 导出导入Excel/Doc 完整实例教程 使用Aspose.Cells.dll——第二篇
- C# winform 导出导入Excel/Doc 完整实例教程 使用Aspose.Cells.dll——第一篇
- C# WinForm 导出导入Excel/Doc 完整实例教程[使用Aspose.Cells.dll]
- 用project文件导入导出数据的实例
- 常用sql语句实例(含过滤及删除重复数据、导入导出数据等)
- Oracle 单实例 迁移到 RAC 实例 -- 使用导出导入方法
- 常用SQL语句实例(含过滤及删除重复数据、导入导出数据等)
- Java 使用jxl.jar 导入导出Excel数据
- jxl导出excel报表实例
- toad for oracle(导入导出实例)
- oracle数据库的导入导出实例