package com.yc.action.grid; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import com.yc.utils.DateUtil; import com.yc.utils.Page; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableCellFormat; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException; /** * Jxl 的 Excel写数据器. * @author chenlb 2007-10-29 上午10:39:31 */ public class JxlExcelWriter { /** * @param datas 封装着Object[]的列表, 一般是String内容. * @param title 每个sheet里的标题. filed是需要导出的字段 * @throws ParseException */ public static void writeExcel(File file, Page page, String[] title,String[] filed,String[] panel_title,String[] panel_filed,List panel,String titles,String local) throws ParseException { List datas=page.getData(); if(datas == null) { throw new IllegalArgumentException("没有数据导出到excel!"); } try { WritableWorkbook workbook = Workbook.createWorkbook(file); WritableSheet ws = workbook.createSheet("sheet 1", 0); int rowNum = 0; //要写的行 int tempNum=0; //写标题 Label cell = new Label(5, 0, titles); ws.addCell(cell); //--end rowNum++; if(panel!=null){ //1,写面板 if(panel_title != null) { String[] s=local.split(";"); int samRow=0; int temcol=0; for(int i=0; i0) col=temcol+Integer.parseInt(st[1]);//列 else col=Integer.parseInt(st[1])-1;//列 Label lab = new Label(col,row , panel_title[i]); ws.addCell(lab);//写入标题 //跟着要写入内容: 位置是col+1,row, // int r = Integer.parseInt(st[2]);//TODO 处理跨行跨列 // int c = Integer.parseInt(st[3]) ; // if( r != 0 || c != 0){ //合并单元格 // ws.mergeCells(cop,i,cop+c,r+i); // cop += c; // } putRowC(ws, row, panel.get(0),new String[]{panel_filed[i]},col+1); //压一行到sheet tempNum=row; temcol=col+1; samRow=row; } } // for(int i=0; i map=(HashMap)cells; boolean flg=false; if(j>0) flg=true; for(String s:filed){ String[] temp=s.split(";"); if(map.get(temp[0])!=null&&temp.length>1){//表示有格式 SimpleDateFormat formatDate = new SimpleDateFormat(temp[1].replaceAll("~", "-")); if(DateUtil.isDate(formatDate.format(map.get(temp[0])))){//格式化日期 String st=formatDate.format(map.get(temp[0])); Label cell = new Label(j, rowNum,st); ws.addCell(cell); } else{ //格式化数字 int indx=temp[1].indexOf("."); String format="#.0"; if(indx>0){//有小数位 //有千位 if(temp[1].startsWith(",")) format=temp[1].replaceAll(",0.*\\.", "#,###."); else format=temp[1].replaceAll("0.*\\.", "#."); }else{//整数 format=temp[1].replaceAll("0", "#"); //是由于格线与java对于格式化的不同,需要在这里做转换 } if(map.get(temp[0]) instanceof Double){ Double d=(Double)map.get(temp[0]); jxl.write.NumberFormat nf = new jxl.write.NumberFormat(format); jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf); jxl.write.Number cell = new jxl.write.Number(j, rowNum,d,wcfN); ws.addCell(cell); }else if(map.get(temp[0]) instanceof BigDecimal){ BigDecimal d=(BigDecimal)map.get(temp[0]); jxl.write.NumberFormat nf = new jxl.write.NumberFormat(format); jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf); jxl.write.Number cell = new jxl.write.Number(j, rowNum,d.doubleValue(),wcfN); ws.addCell(cell); } else if(map.get(temp[0]) instanceof Float){ Float d=(Float)map.get(temp[0]); jxl.write.NumberFormat nf = new jxl.write.NumberFormat(format); jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf); jxl.write.Number cell = new jxl.write.Number(j, rowNum,d.doubleValue(),wcfN); ws.addCell(cell); }else if(map.get(temp[0]) instanceof Integer){ Integer d=(Integer)map.get(temp[0]); jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#"); jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf); jxl.write.Number cell = new jxl.write.Number(j, rowNum,d,wcfN); ws.addCell(cell); } } }else{ //普通字符 if(map.get(temp[0]) instanceof Double){ Double d=(Double)map.get(temp[0]); jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.00"); jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf); jxl.write.Number cell = new jxl.write.Number(j, rowNum,d,wcfN); ws.addCell(cell); }else if(map.get(temp[0]) instanceof BigDecimal){ BigDecimal d=(BigDecimal)map.get(temp[0]); jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.00"); jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf); jxl.write.Number cell = new jxl.write.Number(j, rowNum,d.doubleValue(),wcfN); ws.addCell(cell); } else if(map.get(temp[0]) instanceof Float){ Float d=(Float)map.get(temp[0]); jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.00"); jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf); jxl.write.Number cell = new jxl.write.Number(j, rowNum,d.doubleValue(),wcfN); ws.addCell(cell); }else if(map.get(temp[0]) instanceof Integer){ Integer d=(Integer)map.get(temp[0]); jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#"); jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf); jxl.write.Number cell = new jxl.write.Number(j, rowNum,d,wcfN); ws.addCell(cell); }else{ Label cell = new Label(j, rowNum, ""+((map.get(temp[0])==null||"null".equals(map.get(temp[0])))?"":map.get(temp[0]))); ws.addCell(cell); } } if(!flg) j++; } } }