分享【Excel】jxl下载工具类

该篇文章介绍了如何在JavaServlet中使用JXL库(版本2.6.12)下载工具类,处理导出内容数组和表头,实现按页写入Excel文件的功能,并处理不同类型的数据转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

##Excel下载工具类
添加依赖

 <!-- jxl -->
      <dependency>
          <groupId>net.sourceforge.jexcelapi</groupId>
          <artifactId>jxl</artifactId>
          <version>2.6.12</version>
      </dependency>

代码

/** 
     * 用于servlet的导出
     * @param objData 导出内容数组 
     * @param columns 导出Excel的表头数组 
     * @return
     */  
    public static int exportToExcelForNoStyleByPage(HttpServletResponse response,List<Map<String, List<Object>>> objData, List<String> columns) {
        int flag = 0;  
        //声明工作簿jxl.write.WritableWorkbook  
        WritableWorkbook wwb;
        try {  
            //根据传进来的file对象创建可写入的Excel工作薄  
            OutputStream os = response.getOutputStream(); 
            wwb = Workbook.createWorkbook(os);
              int k = 0;
            WritableSheet ws = wwb.createSheet("Sheet" + (k+1), k);        
            //判断一下表头数组是否有数据  
            if (columns != null && columns.size() > 0) {  
                //循环写入第一个表的表头  
                for (int i = 0; i < columns.size(); i++) {  
                    ws.addCell(new Label(i, 0, columns.get(i)));
                }  
                //判断表中是否有数据  
                if (objData != null && objData.size() > 0) {  
                    //循环写入表中数据  
                    for (int i = 0; i < objData.size(); i++) { 
                    	if (i != 0 && i % 65535 == 0){
                    		k++;
                    		ws = wwb.createSheet("Sheet" + (k+1), k);
                    		//循环写入表头  
                            for (int j = 0; j < columns.size(); j++) {  
                                ws.addCell(new Label(j, 0, columns.get(j)));
                            } 
                    	}
                    	ws.setRowView(i+1-65535*k , 300);//设置行的高度,i表示哪一行
  
                        //转换成map集合{activyName:测试功能,count:2}  
                        Map<String, List<Object>> map = (Map<String, List<Object>>)objData.get(i);
  
                        //循环输出map中的子集:既列值  
                        for(Object o:map.keySet()){
                            //ps:因为要“”通用”“导出功能,所以这里循环的时候不是get("Name"),而是通过map.get(o)  
                            //ws.addCell(new Label(j,i+1,String.valueOf(map.get(o))));
                            //j++;
                        	List<Object> list = map.get(o);
                        	for (int j=0;j<list.size();j++){
                        		//判断Object的类型,最好 页面全部转换成string
                        		 if (list.get(j) instanceof Integer) {
                        			 ws.addCell(new Number(j,i+1-65535*k, Integer.parseInt(list.get(j).toString())));
                        		 }else if (list.get(j) instanceof String){
                        			 ws.addCell(new Label(j,i+1-65535*k, String.valueOf(list.get(j))));
                        		 }else if (list.get(j) instanceof Double){
                        			 ws.addCell(new Number(j,i+1-65535*k, Double.parseDouble(list.get(j).toString())));
                        		 }else if (list.get(j) instanceof Float){
                        			 ws.addCell(new Number(j,i+1-65535*k, Float.parseFloat(list.get(j).toString())));
                        		 }else if (list.get(j) instanceof BigDecimal){
                        			 ws.addCell(new Number(j,i+1-65535*k, Double.parseDouble(list.get(j).toString())));
                        		 }
                        	}
                        }  
                    }  
                }else{  
                    flag = -1;  
                }  
                //写入Exel工作表  
                wwb.write();  
                //关闭Excel工作薄对象   
                wwb.close();  
                //关闭流  
                os.flush();  
                os.close();   
                os =null;  
            }  
        }catch (IllegalStateException e) {
            System.err.println(e.getMessage());
        }  
        catch (Exception ex) {
            flag = 0;  
            ex.printStackTrace();  
        }  
        return flag;  
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值