jxl导出Excel

以前是用Poi做Excel的操作、最近一个项目用jxl来做!现在项目完成了、做做总结!

首先呢、需要的当然是jxl的.jar包!---------->jxl.jar<------------

代码:因为这次的导出业务不怎么复杂稍微把对Excel导出的操作提了一下

  1. /** 
  2.      * @author 旦旦而学 
  3.      * @param file 文件对象 
  4.      * @param objData 导出内容数组 
  5.      * @param sheetName 导出工作表的名称 
  6.      * @param columns 导出Excel的表头数组 
  7.      * @return 
  8.      */  
  9.     public static int exportToExcel_3(File file, Object[] objData, String sheetName,  
  10.   
  11.             String[] columns) {  
  12.         int flag = 0;  
  13.         //声明工作簿jxl.write.WritableWorkbook  
  14.         WritableWorkbook wwb;  
  15.         try {  
  16.             //根据传进来的file对象创建可写入的Excel工作薄  
  17.             wwb = Workbook.createWorkbook(file);  
  18.   
  19.             /* 
  20.              * 创建一个工作表、sheetName为工作表的名称、"0"为第一个工作表 
  21.              * 打开Excel的时候会看到左下角默认有3个sheet、"sheet1、sheet2、sheet3"这样 
  22.              * 代码中的"0"就是sheet1、其它的一一对应。 
  23.              * createSheet(sheetName, 0)一个是工作表的名称,另一个是工作表在工作薄中的位置 
  24.              */  
  25.             WritableSheet ws = wwb.createSheet(sheetName, 0);  
  26.   
  27.             //创建单元格样式  
  28.             WritableCellFormat wcf = new WritableCellFormat();  
  29.   
  30.             //背景颜色设置为"那什么"色  
  31.             wcf.setBackground(Colour.YELLOW);  
  32.   
  33.             /* 
  34.              * 这个是单元格内容居中显示 
  35.              * 还有很多很多样式 
  36.              */  
  37.             wcf.setAlignment(Alignment.CENTRE);  
  38.   
  39.             //判断一下表头数组是否有数据  
  40.             if (columns != null && columns.length > 0) {  
  41.   
  42.                 //循环写入表头  
  43.                 for (int i = 0; i < columns.length; i++) {  
  44.                       
  45.                     /* 
  46.                      * 添加单元格(Cell)内容addCell() 
  47.                      * 添加Label对象Label() 
  48.                      * 数据的类型有很多种、在这里你需要什么类型就导入什么类型 
  49.                      * 如:jxl.write.DateTime 、jxl.write.Number、jxl.write.Label 
  50.                      * Label(i, 0, columns[i], wcf) 
  51.                      * 其中i为列、0为行、columns[i]为数据、wcf为样式 
  52.                      * 合起来就是说将columns[i]添加到第一行(行、列下标都是从0开始)第i列、样式为什么"色"内容居中 
  53.                      */  
  54.                     ws.addCell(new Label(i, 0, columns[i], wcf));  
  55.                 }  
  56.   
  57.                 //判断表中是否有数据  
  58.                 if (objData != null && objData.length > 0) {  
  59.                       
  60.                     //循环写入表中数据  
  61.                     for (int i = 0; i < objData.length; i++) {  
  62.   
  63.                         //我这里直接用Object来接收了、因为情况特殊没有javaBean很痛苦、转换过后得到一条记录  
  64.                         Object obj[] = (Object[]) objData[i];  
  65.   
  66.                         //将得到的记录写入Cell(单元格)中  
  67.                         for (int j = 0; j < obj.length; j++) {  
  68.                               
  69.                             //这里不引用样式了、j为列、(i+1)为行、因为表头占去了一行、所以后面的就+1  
  70.                             ws.addCell(new Label(j, i + 1, String.valueOf(obj[j])));  
  71.                         }  
  72.                     }  
  73.                 }  
  74.   
  75.                 //写入Exel工作表  
  76.                 wwb.write();  
  77.   
  78.                 //关闭Excel工作薄对象   
  79.                 wwb.close();  
  80.             }  
  81.         } catch (Exception ex) {  
  82.             ex.printStackTrace();  
  83.             System.out.println(ex.getMessage());  
  84.             flag = 1;  
  85.         }  
  86.   
  87.         return flag;  
  88.     }  
  89.       
  90.       
  91.     /** 
  92.      * 下载excel 
  93.      * @author 旦旦而学 
  94.      * @param response 
  95.      * @param url 文件存放路径,如: request.getRealPath("/"); 
  96.      * @param filename 文件名 ,如:20110808.xls 
  97.      * @param listData 数据源 
  98.      * @param sheetName 表头名称 
  99.      * @param columns 列名称集合,如:{物品名称,数量,单价} 
  100.      */  
  101.     public static void exportexcle_3(HttpServletResponse response,String url,String filename,Object[] listData,String sheetName,String[] columns)  
  102.     {  
  103.         //根据传进来的文件路径、创建文件  
  104.         File file = new File(url + filename);  
  105.   
  106.         //调用上面的方法、生成Excel文件  
  107.         exportToExcel_3(file, listData, sheetName, columns);  
  108.   
  109.         //声明一个file对象  
  110.         File f=null;  
  111.         try {  
  112.             //根据刚刚的文件地址、创建一个file对象  
  113.             f = new File(url + filename);  
  114.   
  115.             //如果文件不存在  
  116.             if (!f.exists()) {  
  117.                 response.sendError(404"File not found!");  
  118.             }  
  119.   
  120.             //创建一个缓冲输入流对象  
  121.             BufferedInputStream br = new BufferedInputStream(  
  122.                     new FileInputStream(f));  
  123.             byte[] buf = new byte[1024];  
  124.             int len = 0;  
  125.   
  126.             response.reset(); // 非常重要  
  127.             response.setContentType("application/x-msdownload");  
  128.             response.setHeader("Content-Disposition""attachment; filename="  
  129.                     + f.getName());  
  130.               
  131.             //创建输出流对象  
  132.             OutputStream outStream = response.getOutputStream();  
  133.   
  134.             //开始输出  
  135.             while ((len = br.read(buf)) > 0)  
  136.                 outStream.write(buf, 0, len);  
  137.   
  138.             //关闭流对象  
  139.             br.close();  
  140.             outStream.close();  
  141.         } catch (FileNotFoundException e) {  
  142.             e.printStackTrace();  
  143.         } catch (IOException e) {  
  144.             e.printStackTrace();  
  145.         }  
  146.         if (f.exists()) {//下载完毕删除文件  
  147.             f.delete();  
  148.         }  
  149.     }  
  1. /** 
  2.      * @author 旦旦而学 
  3.      * @param file 文件对象 
  4.      * @param objData 导出内容数组 
  5.      * @param sheetName 导出工作表的名称 
  6.      * @param columns 导出Excel的表头数组 
  7.      * @return 
  8.      */  
  9.     public static int exportToExcel_3(File file, Object[] objData, String sheetName,  
  10.   
  11.             String[] columns) {  
  12.         int flag = 0;  
  13.         //声明工作簿jxl.write.WritableWorkbook  
  14.         WritableWorkbook wwb;  
  15.         try {  
  16.             //根据传进来的file对象创建可写入的Excel工作薄  
  17.             wwb = Workbook.createWorkbook(file);  
  18.   
  19.             /* 
  20.              * 创建一个工作表、sheetName为工作表的名称、"0"为第一个工作表 
  21.              * 打开Excel的时候会看到左下角默认有3个sheet、"sheet1、sheet2、sheet3"这样 
  22.              * 代码中的"0"就是sheet1、其它的一一对应。 
  23.              * createSheet(sheetName, 0)一个是工作表的名称,另一个是工作表在工作薄中的位置 
  24.              */  
  25.             WritableSheet ws = wwb.createSheet(sheetName, 0);  
  26.   
  27.             //创建单元格样式  
  28.             WritableCellFormat wcf = new WritableCellFormat();  
  29.   
  30.             //背景颜色设置为"那什么"色  
  31.             wcf.setBackground(Colour.YELLOW);  
  32.   
  33.             /* 
  34.              * 这个是单元格内容居中显示 
  35.              * 还有很多很多样式 
  36.              */  
  37.             wcf.setAlignment(Alignment.CENTRE);  
  38.   
  39.             //判断一下表头数组是否有数据  
  40.             if (columns != null && columns.length > 0) {  
  41.   
  42.                 //循环写入表头  
  43.                 for (int i = 0; i < columns.length; i++) {  
  44.                       
  45.                     /* 
  46.                      * 添加单元格(Cell)内容addCell() 
  47.                      * 添加Label对象Label() 
  48.                      * 数据的类型有很多种、在这里你需要什么类型就导入什么类型 
  49.                      * 如:jxl.write.DateTime 、jxl.write.Number、jxl.write.Label 
  50.                      * Label(i, 0, columns[i], wcf) 
  51.                      * 其中i为列、0为行、columns[i]为数据、wcf为样式 
  52.                      * 合起来就是说将columns[i]添加到第一行(行、列下标都是从0开始)第i列、样式为什么"色"内容居中 
  53.                      */  
  54.                     ws.addCell(new Label(i, 0, columns[i], wcf));  
  55.                 }  
  56.   
  57.                 //判断表中是否有数据  
  58.                 if (objData != null && objData.length > 0) {  
  59.                       
  60.                     //循环写入表中数据  
  61.                     for (int i = 0; i < objData.length; i++) {  
  62.   
  63.                         //我这里直接用Object来接收了、因为情况特殊没有javaBean很痛苦、转换过后得到一条记录  
  64.                         Object obj[] = (Object[]) objData[i];  
  65.   
  66.                         //将得到的记录写入Cell(单元格)中  
  67.                         for (int j = 0; j < obj.length; j++) {  
  68.                               
  69.                             //这里不引用样式了、j为列、(i+1)为行、因为表头占去了一行、所以后面的就+1  
  70.                             ws.addCell(new Label(j, i + 1, String.valueOf(obj[j])));  
  71.                         }  
  72.                     }  
  73.                 }  
  74.   
  75.                 //写入Exel工作表  
  76.                 wwb.write();  
  77.   
  78.                 //关闭Excel工作薄对象   
  79.                 wwb.close();  
  80.             }  
  81.         } catch (Exception ex) {  
  82.             ex.printStackTrace();  
  83.             System.out.println(ex.getMessage());  
  84.             flag = 1;  
  85.         }  
  86.   
  87.         return flag;  
  88.     }  
  89.       
  90.       
  91.     /** 
  92.      * 下载excel 
  93.      * @author 旦旦而学 
  94.      * @param response 
  95.      * @param url 文件存放路径,如: request.getRealPath("/"); 
  96.      * @param filename 文件名 ,如:20110808.xls 
  97.      * @param listData 数据源 
  98.      * @param sheetName 表头名称 
  99.      * @param columns 列名称集合,如:{物品名称,数量,单价} 
  100.      */  
  101.     public static void exportexcle_3(HttpServletResponse response,String url,String filename,Object[] listData,String sheetName,String[] columns)  
  102.     {  
  103.         //根据传进来的文件路径、创建文件  
  104.         File file = new File(url + filename);  
  105.   
  106.         //调用上面的方法、生成Excel文件  
  107.         exportToExcel_3(file, listData, sheetName, columns);  
  108.   
  109.         //声明一个file对象  
  110.         File f=null;  
  111.         try {  
  112.             //根据刚刚的文件地址、创建一个file对象  
  113.             f = new File(url + filename);  
  114.   
  115.             //如果文件不存在  
  116.             if (!f.exists()) {  
  117.                 response.sendError(404"File not found!");  
  118.             }  
  119.   
  120.             //创建一个缓冲输入流对象  
  121.             BufferedInputStream br = new BufferedInputStream(  
  122.                     new FileInputStream(f));  
  123.             byte[] buf = new byte[1024];  
  124.             int len = 0;  
  125.   
  126.             response.reset(); // 非常重要  
  127.             response.setContentType("application/x-msdownload");  
  128.             response.setHeader("Content-Disposition""attachment; filename="  
  129.                     + f.getName());  
  130.               
  131.             //创建输出流对象  
  132.             OutputStream outStream = response.getOutputStream();  
  133.   
  134.             //开始输出  
  135.             while ((len = br.read(buf)) > 0)  
  136.                 outStream.write(buf, 0, len);  
  137.   
  138.             //关闭流对象  
  139.             br.close();  
  140.             outStream.close();  
  141.         } catch (FileNotFoundException e) {  
  142.             e.printStackTrace();  
  143.         } catch (IOException e) {  
  144.             e.printStackTrace();  
  145.         }  
  146.         if (f.exists()) {//下载完毕删除文件  
  147.             f.delete();  
  148.         }  
  149.     }  


在Action中只需在获取完数据库中的数据过后直接调用上面的方法、并传入参数就Ok了!

  1. Object[] repObj = report.queryMaintainUnit(obj,pageInfo);  
  2.             String[] strArr = {"流水号","路段名","维护站名","所属系统",  
  3.                     "故障等级","维护工区","派工时间","维修单位",  
  4.                     "接修时间","处理结果","维修结果"};  
  5.             ExportDate expor = new ExportDate();  
  6.             expor.exportexcle_3(response,this.getUrl(),this.getFileName(),  
  7.                     repObj,"维修单位明细表",strArr);  
  1. Object[] repObj = report.queryMaintainUnit(obj,pageInfo);  
  2.             String[] strArr = {"流水号","路段名","维护站名","所属系统",  
  3.                     "故障等级","维护工区","派工时间","维修单位",  
  4.                     "接修时间","处理结果","维修结果"};  
  5.             ExportDate expor = new ExportDate();  
  6.             expor.exportexcle_3(response,this.getUrl(),this.getFileName(),  
  7.                     repObj,"维修单位明细表",strArr);  

 

这是查询出来的数据:

 

Excel:

 

 

在加上分页功能过后、数据出了问题、当点击下一页的时候、会多出一列、这一列是Oracle数据库分页时添加的rownum列、1、2、3、4、5、6、这样!

因为我的数据在输出的时候没有用到javaBean、用的是数组、所以输出的时候、连后面的那一列也一起输出了!

这样需要判断一下、但是不知道为什么、第一页的时候rownum列不会出现、第二页还有后面的页rownum就会跑出来!

虽然占时解决了、但是害怕它哪天不高兴出点什么乱子就老火了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值