java 导出数据到excel 之 WritableWorkbook

java 导出数据到excel 之 WritableWorkbook 

2011-01-19 12:34:58|  分类: ●开发-Java |  标签:label  sheet  format2  addcell  number  |字号 订阅

 

所需jar文件为 jxl.jar   可以在此获取: http://www.uushare.com/user/sudyguo/files/2209594

这种方法导入excel效率较高,可批量导出; 更多更详细的用法,可以看:   http://pcedu.pconline.com.cn/empolder/gj/java/0608/853669_1.html

实例:

  1.      此段代码用于生成excel文件 
  2.      */ 
  3.     WritableWorkbook book= Workbook.createWorkbook(new File(application.getRealPath("/")+"price.xls"));  
  4.     //生成名为"第一页"的工作表,参数0表示这是第一页  
  5.     WritableSheet sheet=book.createSheet("第一页",0);  
  6.     //在Label对象的构造子中指名单元格位置是第一列第一行(0,0)  
  7.     WritableFont font1= new WritableFont(WritableFont.TIMES,14,WritableFont.BOLD);  
  8.     WritableCellFormat format1=new WritableCellFormat(font1);  
  9.     format1.setAlignment(jxl.format.Alignment.CENTRE);//设置为居中 
  10.     sheet.setColumnView(1,20);//设置第1列宽度,6cm左右 
  11.     sheet.mergeCells(0,0,7,0); 
  12.     Label label=new Label(0,0,"统计报表",format1);  
  13.      
  14.     //将定义好的单元格添加到工作表中  
  15.     sheet.addCell(label);   
  16.     //将定义好的单元格添加到工作表中  
  17.     WritableFont font2=new WritableFont(WritableFont.createFont("楷体_GB2312"),10,WritableFont.NO_BOLD ); 
  18.     WritableCellFormat format2=new WritableCellFormat(font2); 
  19.     format2.setAlignment(jxl.format.Alignment.CENTRE);//设置为居中    
  20.     //设置边框 
  21.     format2.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.NONE); 
  22.     label=new Label(0,2,"编号",format2);  
  23.     sheet.addCell(label);  
  24.     label=new Label(1,2,"采集日期",format2); 
  25.     sheet.addCell(label);  
  26.     label=new Label(2,2,"采集点",format2); 
  27.     sheet.addCell(label);  
  28.     label=new Label(3,2,"品种",format2); 
  29.     sheet.addCell(label);  
  30.     label=new Label(4,2,"种类",format2); 
  31.     sheet.addCell(label);  
  32.     label=new Label(5,2,"品种说明",format2); 
  33.     sheet.addCell(label); 
  34.     label=new Label(6,2,"最高价",format2); 
  35.     sheet.addCell(label); 
  36.     label=new Label(7,2,"最低价",format2); 
  37.     sheet.addCell(label); 
  38.     label=new Label(8,2,"平均价",format2); 
  39.     sheet.addCell(label); 
  40.     label=new Label(9,2,"状态",format2); 
  41.     sheet.addCell(label); 
  42.     /*生成一个保存数字的单元格
  43.     必须使用Number的完整包路径,否则有语法歧义
  44.     单元格位置是第二列,第一行,值为789.123
  45.     jxl.write.Number number = new jxl.write.Number(2,0,789.123);
  46.     sheet.addCell(number); */ 
  47.     RowSet rs_info =null; 
  48.     Row row_info =null; 
  49.     DecimalFormat df_price=new java.text.DecimalFormat("#0.0");  
  50.     int count_zs=0;//信息提交总数 
  51.     int count_yx=0;//信息有效数 
  52.     String format=""; 
  53.     where=""; 
  54.     jxl.write.Number number=null; 
  55.     for (int i = 0; i <rs_price.getRowCount(); i++)  
  56.     {     
  57.          row_price=rs_price.getRow(i); 
  58.           
  59.         number = new jxl.write.Number(0,i+3,i+1,format2);  
  60.         sheet.addCell(number); 
  61.         label=new Label(1,i+3,row_price.getFieldValue("collection_date"),format2); 
  62.         sheet.addCell(label); 
  63.         label=new Label(2,i+3,row_price.getFieldValue("point_name"),format2); 
  64.         sheet.addCell(label); 
  65.         label=new Label(3,i+3,row_price.getFieldValue("type_parent_name"),format2);  
  66.         sheet.addCell(label);    
  67.         label=new Label(4,i+3,row_price.getFieldValue("type_name"),format2);  
  68.         sheet.addCell(label); 
  69.         label=new Label(5,i+3, row_price.getFieldValue("type_desc"),format2);   
  70.         sheet.addCell(label);  
  71.         number=new jxl.write.Number(6,i+3,44.9 ,format2); 
  72.         sheet.addCell(number);  
  73.         number=new jxl.write.Number(7,i+3,  33 ,format2); 
  74.         sheet.addCell(number);  
  75.         number=new jxl.write.Number(8,i+3, Double.parseDouble(row_price.getFieldValue("price_avg").toString())  ,format2); 
  76.         sheet.addCell(number);  
  77.         label=new Label(9,i+3,  row_price.getFieldValue("state") ,format2); 
  78.         sheet.addCell(label);        
  79.     } 
  80.     book.write(); 
  81.     book.close(); 
  82.     SmartUpload su = new SmartUpload();// 新建一个SmartUpload对象 
  83.     su.initialize(pageContext);// 初始化 
  84.   /* 设定contentDisposition为null以禁止浏览器自动打开文件,
  85.     保证点击链接后是下载文件。若不设定,则下载的文件扩展名为
  86.     doc时,浏览器将自动用word打开它。扩展名为pdf时,
  87.   浏览器将用acrobat打开。*/ 
  88.      su.setContentDisposition(null); 
  89.   // 下载文件 
  90.      su.downloadFile("price.xls"); 
  91.      out.clear(); 
  92.      out = pageContext.pushBody(); 
  93.      File f=new File(application.getRealPath("/")+"price.xls"); 
  94. //   f.delete();  
  95.     flag=false; 
  96.     }else{ 
  97.         response.sendRedirect("./price_auditing.jsp"); 
  98.     } 
  99. catch (Exception e)  
  100. System.out.println("错误:"+e); 
  101.             session.setAttribute(Tools.ERROR_INFO,"服务器内部错误!"); 
  102.             session.setAttribute(Tools.DEST_URL,"price/type_excel.jsp");   //这里要使用绝对地址 
  103.             response.sendRedirect(Tools.ERROR_PAGE);   //转到错误提醒页面  
  104. %> 
此段代码用于生成excel文件 */ WritableWorkbook book= Workbook.createWorkbook(new File(application.getRealPath("/")+"price.xls")); //生成名为"第一页"的工作表,参数0表示这是第一页 WritableSheet sheet=book.createSheet("第一页",0); //在Label对象的构造子中指名单元格位置是第一列第一行(0,0) WritableFont font1= new WritableFont(WritableFont.TIMES,14,WritableFont.BOLD); WritableCellFormat format1=new WritableCellFormat(font1); format1.setAlignment(jxl.format.Alignment.CENTRE);//设置为居中 sheet.setColumnView(1,20);//设置第1列宽度,6cm左右 sheet.mergeCells(0,0,7,0); Label label=new Label(0,0,"统计报表",format1); //将定义好的单元格添加到工作表中 sheet.addCell(label); //将定义好的单元格添加到工作表中 WritableFont font2=new WritableFont(WritableFont.createFont("楷体_GB2312"),10,WritableFont.NO_BOLD ); WritableCellFormat format2=new WritableCellFormat(font2); format2.setAlignment(jxl.format.Alignment.CENTRE);//设置为居中 //设置边框 format2.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.NONE); label=new Label(0,2,"编号",format2); sheet.addCell(label); label=new Label(1,2,"采集日期",format2); sheet.addCell(label); label=new Label(2,2,"采集点",format2); sheet.addCell(label); label=new Label(3,2,"品种",format2); sheet.addCell(label); label=new Label(4,2,"种类",format2); sheet.addCell(label); label=new Label(5,2,"品种说明",format2); sheet.addCell(label); label=new Label(6,2,"最高价",format2); sheet.addCell(label); label=new Label(7,2,"最低价",format2); sheet.addCell(label); label=new Label(8,2,"平均价",format2); sheet.addCell(label); label=new Label(9,2,"状态",format2); sheet.addCell(label); /*生成一个保存数字的单元格 必须使用Number的完整包路径,否则有语法歧义 单元格位置是第二列,第一行,值为789.123 jxl.write.Number number = new jxl.write.Number(2,0,789.123); sheet.addCell(number); */ RowSet rs_info =null; Row row_info =null; DecimalFormat df_price=new java.text.DecimalFormat("#0.0"); int count_zs=0;//信息提交总数 int count_yx=0;//信息有效数 String format=""; where=""; jxl.write.Number number=null; for (int i = 0; i <rs_price.getRowCount(); i++) { row_price=rs_price.getRow(i); number = new jxl.write.Number(0,i+3,i+1,format2); sheet.addCell(number); label=new Label(1,i+3,row_price.getFieldValue("collection_date"),format2); sheet.addCell(label); label=new Label(2,i+3,row_price.getFieldValue("point_name"),format2); sheet.addCell(label); label=new Label(3,i+3,row_price.getFieldValue("type_parent_name"),format2); sheet.addCell(label); label=new Label(4,i+3,row_price.getFieldValue("type_name"),format2); sheet.addCell(label); label=new Label(5,i+3, row_price.getFieldValue("type_desc"),format2); sheet.addCell(label); number=new jxl.write.Number(6,i+3,44.9 ,format2); sheet.addCell(number); number=new jxl.write.Number(7,i+3, 33 ,format2); sheet.addCell(number); number=new jxl.write.Number(8,i+3, Double.parseDouble(row_price.getFieldValue("price_avg").toString()) ,format2); sheet.addCell(number); label=new Label(9,i+3, row_price.getFieldValue("state") ,format2); sheet.addCell(label); } book.write(); book.close(); SmartUpload su = new SmartUpload();// 新建一个SmartUpload对象 su.initialize(pageContext);// 初始化 /* 设定contentDisposition为null以禁止浏览器自动打开文件, 保证点击链接后是下载文件。若不设定,则下载的文件扩展名为 doc时,浏览器将自动用word打开它。扩展名为pdf时, 浏览器将用acrobat打开。*/ su.setContentDisposition(null); // 下载文件 su.downloadFile("price.xls"); out.clear(); out = pageContext.pushBody(); File f=new File(application.getRealPath("/")+"price.xls"); // f.delete(); flag=false; }else{ response.sendRedirect("./price_auditing.jsp"); } } catch (Exception e) { System.out.println("错误:"+e); session.setAttribute(Tools.ERROR_INFO,"服务器内部错误!"); session.setAttribute(Tools.DEST_URL,"price/type_excel.jsp"); //这里要使用绝对地址 response.sendRedirect(Tools.ERROR_PAGE); //转到错误提醒页面 } %>  

读取方法:

  1. try { 
  2.             Workbook book = Workbook.getWorkbook(new File(" test.xls ")); 
  3.             int num = book.getNumberOfSheets(); 
  4.             for (int a = 0; a < num; a++) { 
  5.                 // 获得第a个工作表对象 
  6.                 Sheet sheet = book.getSheet(a); 
  7.                 int columnum = sheet.getColumns(); // 得到列数 
  8.                 int rownum = sheet.getRows(); // 得到行数 
  9.                 System.out.println(columnum); 
  10.                 System.out.println(rownum); 
  11.                 for (int i = 0; i < rownum; i++) // 循环进行读写 
  12.                 { 
  13.                     for (int j = 0; j < columnum; j++) { 
  14.                         Cell cell1 = sheet.getCell(j, i); 
  15.                         String result = cell1.getContents(); 
  16.                         System.out.print(result); 
  17.                         System.out.print(" \t "); 
  18.                     } 
  19.                     System.out.println(); 
  20.                 } 
  21.             } 
  22.             book.close(); 
  23.         } catch (Exception e) { 
  24.             System.out.println(e); 
  25.         } 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值