用java操作Excel有很多方法,这里我主要简单介绍一下用jxl这个方法,因为我也是新手嘛,也是第一次操作这个东西,可能不是很全面。大家见谅。

下面是我用jxl操作Excel表格的一些细节和原理。你也可以用poi,不过这个方法在网上有很多介绍我就不多加赘述了。

 

首先介绍一下导出Excel表格。

第一步:

             项目需要导入jxl.jar (在网上可以下载,然后放到lib文件夹中)

第二步:

             我的项目是基于S2SH集成框架开发的。

             首先我们通过页面点击生成Excel文件按钮。跳至生成Excel文件的Action处理方法中。

            

Date today = new Date(new java.util.Date().getTime());   
              inputPath = "移库单"+today+".xls";  
              HttpServletRequest request = ServletActionContext.getRequest();  
              HttpServletResponse response = ServletActionContext.getResponse();  
              response.reset();   
              response.setCharacterEncoding("ISO8859-1");   
              response.setHeader("Content-Disposition", "p_w_upload; filename=" + new String(inputPath.getBytes("GBK"), "ISO8859-1"));//fileCh

Name为下载时用户看到的文件名  
            

response.setHeader("Connection", "close");  
              response.setHeader("Content-Type", "application/octet-stream");

             上面代码是我要生成的文件名字。"移库单2011-12-7.xls" 后面是处理文件名,避免生成文件名中文不会乱码。

第三步:

            首先要把你需要生成Excel文件的数据全部查询出来。并把发放到List集合里面。

            我这里因为生成的数据比较大所以放在了下面这个放着Map集合的List集合里面。

List<Map<String,String>> list = reportService.getMoveOrderView(pageBean,orderNumber);

            总之上面这句代码就是把你需要生成Excel文件的数据放在一个List集合里面。

//打开输出流。 
             WritableWorkbook book = Workbook.createWorkbook(os);        //把输出流传给Excel文件。 
             WritableSheet sheet = book.createSheet("第一页", 0);                    //获得Excel表的第一页。 
             WritableCellFormat format = new WritableCellFormat();                //规定格式。 
             format.setAlignment(Alignment.CENTRE);                                         //设置格式为段落居中。//创建单元格。第1列,第1行,单元格内容,添加格式。 
             sheet.addCell(label);                                                                                //将定义好的单元格添加到工作表中。 
            sheet.mergeCells(0, 0, 10, 0);                                                                 //合并单元格。从第1列第1行合并到第11列第一行。


上面代码获得输出流os 生成Excel文件 把输出流传给book。这样页面点完生成Excel文件按钮之后就会直接提示用户另存为/下载Excel文件,

第四步:

for (int i =0;i<list.size();i++) { 
                     Label labelorderNumberTitle = new Label(0, 1, "移库单号",format); 
                     sheet.addCell(labelorderNumberTitle); 
                     Label labelPalletNameTitle = new Label(1, 1, "管理号",format); 
                     sheet.addCell(labelPalletNameTitle); 
                     Label labelMaterialNumberTitle = new Label(2, 1, "物料号",format); 
                     sheet.addCell(labelMaterialNumberTitle); 
                     Label labelMaterialDescTitle = new Label(3, 1, "物料描述",format); 
                     sheet.addCell(labelMaterialDescTitle); 
                     Label labelQtyTitle = new Label(4, 1, "移库数量",format); 
                     sheet.addCell(labelQtyTitle); 
                     Label labelBatchNumberTitle = new Label(5, 1, "批次号",format); 
                     sheet.addCell(labelBatchNumberTitle); 
                     Label labelAreaNameTitle = new Label(6, 1, "原库区",format); 
                     sheet.addCell(labelAreaNameTitle); 
                     Label labelPosNameTitle = new Label(7, 1, "原库位",format); 
                     sheet.addCell(labelPosNameTitle); 
                     Label labelStockAreaNameTitle = new Label(8, 1, "目标库区",format); 
                     sheet.addCell(labelStockAreaNameTitle); 
                     Label labelStockPosNameTitle = new Label(9, 1, "目标库位",format); 
                     sheet.addCell(labelStockPosNameTitle); 
                     Label labelNumberTitle = new Label(10, 1, "参考号",format); 
                     sheet.addCell(labelNumberTitle); 
                     
                     Map<String, String> map = list.get(i);                     Label labelOrderNumber = new Label(0, i+2, map.get("orderNumber")); 
                     Label labelPalletName = new Label(1, i+2, map.get("palletName")); 
                     Label materialNumber = new Label(2, i+2, map.get("materialNumber")); 
                     Label materialDesc = new Label(3, i+2, map.get("materialDesc")); 
                     Label qty = new Label(4, i+2, map.get("qty")); 
                     Label batchNumber = new Label(5, i+2, map.get("batchNumber")); 
                     Label areaName = new Label(6, i+2, map.get("areaName")); 
                     Label posName = new Label(7, i+2, map.get("posName")); 
                     Label stockAreaName = new Label(8, i+2, map.get("stockAreaName")); 
                     Label stockPosName = new Label(9, i+2, map.get("stockPosName")); 
                     Label number = new Label(10, i+2, map.get("number")); 
                     sheet.addCell(labelOrderNumber); 
                     sheet.addCell(labelPalletName); 
                     sheet.addCell(materialNumber); 
                     sheet.addCell(materialDesc); 
                     sheet.addCell(qty); 
                     sheet.addCell(batchNumber); 
                     sheet.addCell(areaName); 
                     sheet.addCell(posName); 
                     sheet.addCell(stockAreaName); 
                     sheet.addCell(stockPosName); 
                     sheet.addCell(number); 
                 
             } 
             book.write(); 
             book.close(); 
             os.flush(); 
             os.close();


            上面代码循环遍历List集合里面的数据。并将数据放到单元格中。在把定义好的单元格添加到工作表中。写入数据并关闭文件。清空输出流并关闭输出流。这样一个Excel文件就生成了。