前2天后台系统需要生成报表,正好抽时间复习了一下之前做过的JAVA生成EXCEL,下面介绍POI 和JXL 生成报表的2种方式。

  前2天后台系统需要生成报表,正好抽时间复习了一下之前做过的JAVA生成EXCEL,下面介绍POI 和JXL 生成报表的2种方式。

1.jxl 生成报表

 

Java代码  收藏代码
  1. package excel;  
  2.   
  3. import java.io.FileOutputStream;  
  4. import java.io.OutputStream;  
  5. import java.text.SimpleDateFormat;  
  6. import java.util.Date;  
  7.   
  8. import jxl.Workbook;  
  9. import jxl.format.Alignment;  
  10. import jxl.format.Border;  
  11. import jxl.format.BorderLineStyle;  
  12. import jxl.format.CellFormat;  
  13. import jxl.write.Label;  
  14. import jxl.write.WritableCellFormat;  
  15. import jxl.write.WritableFont;  
  16. import jxl.write.WritableSheet;  
  17. import jxl.write.WritableWorkbook;  
  18. /***********************************************************************    
  19.  *    
  20.  *   jxlCreate.java      
  21.  *   @copyright       Copyright:   2009-2012      
  22.  *   @creator         周辉<br/>    
  23.  *   @create-time   Mar 9, 2010   1:35:19 PM    
  24.  *   @revision         $Id:     *    
  25.  ***********************************************************************/  
  26. public class jxlCreate {  
  27.   
  28.     /** 
  29.      * @param args 
  30.      */  
  31.     public static void main(String[] args) {  
  32.          // 准备设置excel工作表的标题     
  33.         String[] title = {"编号","产品名称","产品价格","产品数量","生产日期","产地","是否出口"};     
  34.         try {     
  35.             // 获得开始时间     
  36.             long start = System.currentTimeMillis();     
  37.             // 输出的excel的路径     
  38.             String filePath = "c:\\test.xls";     
  39.             // 创建Excel工作薄     
  40.             WritableWorkbook wwb;     
  41.             // 新建立一个jxl文件,即在C盘下生成test.xls     
  42.             OutputStream os = new FileOutputStream(filePath);     
  43.             wwb=Workbook.createWorkbook(os);      
  44.             // 添加第一个工作表并设置第一个Sheet的名字     
  45.             WritableSheet sheet = wwb.createSheet("产品清单"0);     
  46.             Label label;     
  47.             for(int i=0;i<title.length;i++){     
  48.                 // Label(x,y,z)其中x代表单元格的第x+1列,第y+1行, 单元格的内容是y     
  49.                 // 在Label对象的子对象中指明单元格的位置和内容     
  50.                 label = new Label(i,0,title[i]);     
  51.                 // 将定义好的单元格添加到工作表中     
  52.                 sheet.addCell(label);     
  53.             }     
  54.             // 下面是填充数据     
  55.             /*    
  56.              * 保存数字到单元格,需要使用jxl.write.Number   
  57.              * 必须使用其完整路径,否则会出现错误   
  58.              * */    
  59.             // 填充产品编号     
  60.             jxl.write.Number number = new jxl.write.Number(0,1,20071001);     
  61.             sheet.addCell(number);     
  62.             // 填充产品名称     
  63.             label = new Label(1,1,"金鸽瓜子");     
  64.             sheet.addCell(label);     
  65.             /*   
  66.              * 定义对于显示金额的公共格式   
  67.              * jxl会自动实现四舍五入   
  68.              * 例如 2.456会被格式化为2.46,2.454会被格式化为2.45   
  69.              * */    
  70.             jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");     
  71.             jxl.write.WritableCellFormat wcf = new jxl.write.WritableCellFormat(nf);     
  72.             // 填充产品价格     
  73.             jxl.write.Number nb = new jxl.write.Number(2,1,2.45,wcf);     
  74.             sheet.addCell(nb);     
  75.             // 填充产品数量     
  76.             jxl.write.Number numb = new jxl.write.Number(3,1,200);     
  77.             sheet.addCell(numb);     
  78.             /*   
  79.              * 定义显示日期的公共格式   
  80.              * 如:yyyy-MM-dd hh:mm   
  81.              * */    
  82.             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");     
  83.             String newdate = sdf.format(new Date());     
  84.             // 填充出产日期     
  85.             label = new Label(4,1,newdate);     
  86.             sheet.addCell(label);     
  87.             // 填充产地     
  88.             label = new Label(5,1,"陕西西安");     
  89.             sheet.addCell(label);     
  90.             /*   
  91.              * 显示布尔值   
  92.              * */    
  93.             jxl.write.Boolean bool = new jxl.write.Boolean(6,1,true);     
  94.             sheet.addCell(bool);     
  95.             /*   
  96.              * 合并单元格   
  97.              * 通过writablesheet.mergeCells(int x,int y,int m,int n);来实现的   
  98.              * 表示将从第x+1列,y+1行到m+1列,n+1行合并   
  99.              *    
  100.              * */    
  101.             sheet.mergeCells(0,3,2,3);     
  102.             label = new Label(0,3,"合并了三个单元格");     
  103.             sheet.addCell(label);     
  104.             /*   
  105.              *    
  106.              * 定义公共字体格式   
  107.              * 通过获取一个字体的样式来作为模板   
  108.              * 首先通过web.getSheet(0)获得第一个sheet   
  109.              * 然后取得第一个sheet的第二列,第一行也就是"产品名称"的字体    
  110.              * */    
  111.             CellFormat cf = wwb.getSheet(0).getCell(10).getCellFormat();     
  112.             WritableCellFormat wc = new WritableCellFormat();     
  113.             // 设置居中     
  114.             wc.setAlignment(Alignment.CENTRE);     
  115.             // 设置边框线     
  116.             wc.setBorder(Border.ALL, BorderLineStyle.THIN);     
  117.             // 设置单元格的背景颜色     
  118.             wc.setBackground(jxl.format.Colour.RED);     
  119.             label = new Label(1,5,"字体",wc);     
  120.             sheet.addCell(label);     
  121.     
  122.             // 设置字体     
  123.             jxl.write.WritableFont wfont = new jxl.write.WritableFont(WritableFont.createFont("隶书"),20);     
  124.             WritableCellFormat font = new WritableCellFormat(wfont);     
  125.             label = new Label(2,6,"隶书",font);     
  126.             sheet.addCell(label);     
  127.                  
  128.             // 写入数据     
  129.             wwb.write();     
  130.             // 关闭文件     
  131.             wwb.close();     
  132.             long end = System.currentTimeMillis();     
  133.             System.out.println("----完成该操作共用的时间是:"+(end-start)/1000);     
  134.         } catch (Exception e) {     
  135.             System.out.println("---出现异常---");     
  136.             e.printStackTrace();     
  137.         }     
  138.   
  139.     }  
  140.   
  141. }  
package excel;

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.CellFormat;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
/***********************************************************************   
 *   
 *   jxlCreate.java     
 *   @copyright       Copyright:   2009-2012     
 *   @creator         周辉<br/>   
 *   @create-time   Mar 9, 2010   1:35:19 PM   
 *   @revision         $Id:     *   
 ***********************************************************************/
public class jxlCreate {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		 // 准备设置excel工作表的标题   
        String[] title = {"编号","产品名称","产品价格","产品数量","生产日期","产地","是否出口"};   
        try {   
            // 获得开始时间   
            long start = System.currentTimeMillis();   
            // 输出的excel的路径   
            String filePath = "c:\\test.xls";   
            // 创建Excel工作薄   
            WritableWorkbook wwb;   
            // 新建立一个jxl文件,即在C盘下生成test.xls   
            OutputStream os = new FileOutputStream(filePath);   
            wwb=Workbook.createWorkbook(os);    
            // 添加第一个工作表并设置第一个Sheet的名字   
            WritableSheet sheet = wwb.createSheet("产品清单", 0);   
            Label label;   
            for(int i=0;i<title.length;i++){   
                // Label(x,y,z)其中x代表单元格的第x+1列,第y+1行, 单元格的内容是y   
                // 在Label对象的子对象中指明单元格的位置和内容   
                label = new Label(i,0,title[i]);   
                // 将定义好的单元格添加到工作表中   
                sheet.addCell(label);   
            }   
            // 下面是填充数据   
            /*   
             * 保存数字到单元格,需要使用jxl.write.Number  
             * 必须使用其完整路径,否则会出现错误  
             * */  
            // 填充产品编号   
            jxl.write.Number number = new jxl.write.Number(0,1,20071001);   
            sheet.addCell(number);   
            // 填充产品名称   
            label = new Label(1,1,"金鸽瓜子");   
            sheet.addCell(label);   
            /*  
             * 定义对于显示金额的公共格式  
             * jxl会自动实现四舍五入  
             * 例如 2.456会被格式化为2.46,2.454会被格式化为2.45  
             * */  
            jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");   
            jxl.write.WritableCellFormat wcf = new jxl.write.WritableCellFormat(nf);   
            // 填充产品价格   
            jxl.write.Number nb = new jxl.write.Number(2,1,2.45,wcf);   
            sheet.addCell(nb);   
            // 填充产品数量   
            jxl.write.Number numb = new jxl.write.Number(3,1,200);   
            sheet.addCell(numb);   
            /*  
             * 定义显示日期的公共格式  
             * 如:yyyy-MM-dd hh:mm  
             * */  
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");   
            String newdate = sdf.format(new Date());   
            // 填充出产日期   
            label = new Label(4,1,newdate);   
            sheet.addCell(label);   
            // 填充产地   
            label = new Label(5,1,"陕西西安");   
            sheet.addCell(label);   
            /*  
             * 显示布尔值  
             * */  
            jxl.write.Boolean bool = new jxl.write.Boolean(6,1,true);   
            sheet.addCell(bool);   
            /*  
             * 合并单元格  
             * 通过writablesheet.mergeCells(int x,int y,int m,int n);来实现的  
             * 表示将从第x+1列,y+1行到m+1列,n+1行合并  
             *   
             * */  
            sheet.mergeCells(0,3,2,3);   
            label = new Label(0,3,"合并了三个单元格");   
            sheet.addCell(label);   
            /*  
             *   
             * 定义公共字体格式  
             * 通过获取一个字体的样式来作为模板  
             * 首先通过web.getSheet(0)获得第一个sheet  
             * 然后取得第一个sheet的第二列,第一行也就是"产品名称"的字体   
             * */  
            CellFormat cf = wwb.getSheet(0).getCell(1, 0).getCellFormat();   
            WritableCellFormat wc = new WritableCellFormat();   
            // 设置居中   
            wc.setAlignment(Alignment.CENTRE);   
            // 设置边框线   
            wc.setBorder(Border.ALL, BorderLineStyle.THIN);   
            // 设置单元格的背景颜色   
            wc.setBackground(jxl.format.Colour.RED);   
            label = new Label(1,5,"字体",wc);   
            sheet.addCell(label);   
  
            // 设置字体   
            jxl.write.WritableFont wfont = new jxl.write.WritableFont(WritableFont.createFont("隶书"),20);   
            WritableCellFormat font = new WritableCellFormat(wfont);   
            label = new Label(2,6,"隶书",font);   
            sheet.addCell(label);   
               
            // 写入数据   
            wwb.write();   
            // 关闭文件   
            wwb.close();   
            long end = System.currentTimeMillis();   
            System.out.println("----完成该操作共用的时间是:"+(end-start)/1000);   
        } catch (Exception e) {   
            System.out.println("---出现异常---");   
            e.printStackTrace();   
        }   

	}

}

 2.POI 生成

 

Java代码  收藏代码
  1. package excel;  
  2.   
  3. import java.io.FileOutputStream;  
  4. import java.text.SimpleDateFormat;  
  5. import java.util.Date;  
  6.   
  7. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  8. import org.apache.poi.ss.usermodel.Cell;  
  9. import org.apache.poi.ss.usermodel.CellStyle;  
  10. import org.apache.poi.ss.usermodel.DataFormat;  
  11. import org.apache.poi.ss.usermodel.Row;  
  12. import org.apache.poi.ss.usermodel.Sheet;  
  13. import org.apache.poi.ss.usermodel.Workbook;  
  14. import org.apache.poi.ss.util.CellRangeAddress;  
  15.   
  16.   
  17. /***********************************************************************    
  18.  *    
  19.  *   poiCreate.java      
  20.  *   @copyright       Copyright:   2009-2012      
  21.  *   @creator         周辉<br/>    
  22.  *   @create-time   Mar 9, 2010   2:27:52 PM    
  23.  *   @revision         $Id:     *    
  24.  ***********************************************************************/  
  25. public class poiCreate {  
  26.   
  27.     /** 
  28.      * @param args 
  29.      */  
  30.     public static void main(String[] args) throws Exception {  
  31.         //创建一个EXCEL  
  32.         Workbook wb = new HSSFWorkbook();  
  33.         DataFormat format = wb.createDataFormat();  
  34.         CellStyle style;  
  35.         //创建一个SHEET  
  36.         Sheet sheet1 = wb.createSheet("产品清单");  
  37.         String[] title = {"编号","产品名称","产品价格","产品数量","生产日期","产地","是否出口"};  
  38.         int i=0;  
  39.         //创建一行  
  40.         Row row = sheet1.createRow((short)0);  
  41.         //填充标题  
  42.         for (String  s:title){  
  43.             Cell cell = row.createCell(i);  
  44.             cell.setCellValue(s);  
  45.             i++;  
  46.         }  
  47.         Row row1 = sheet1.createRow((short)1);  
  48.         //下面是填充数据  
  49.         row1.createCell(0).setCellValue(20071001);  
  50.         row1.createCell(1).setCellValue("金鸽瓜子");  
  51.         //创建一个单元格子  
  52.         Cell cell2=row1.createCell(2);  
  53.         // 填充产品价格  
  54.         cell2.setCellValue(2.45);  
  55.         style = wb.createCellStyle();  
  56.         style.setDataFormat(format.getFormat("#.##"));  
  57.         //设定样式  
  58.         cell2.setCellStyle(style);  
  59.         // 填充产品数量  
  60.         row1.createCell(3).setCellValue(200);  
  61.         /*   
  62.          * 定义显示日期的公共格式   
  63.          * 如:yyyy-MM-dd hh:mm   
  64.          * */  
  65.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");     
  66.         String newdate = sdf.format(new Date());   
  67.         // 填充出产日期     
  68.         row1.createCell(4).setCellValue(newdate);  
  69.         row1.createCell(5).setCellValue("陕西西安");  
  70.         /*   
  71.          * 显示布尔值   
  72.          * */   
  73.         row1.createCell(6).setCellValue(true);  
  74.         /*   
  75.          * 合并单元格   
  76.          * 通过writablesheet.mergeCells(int x,int y,int m,int n);来实现的   
  77.          * 表示将first row, last row,first column,last column 
  78.          *    
  79.          * */    
  80.         Row row2 = sheet1.createRow((short2);  
  81.          Cell cell3 = row2.createCell((short0);  
  82.          cell3.setCellValue("合并了三个单元格");  
  83.         sheet1.addMergedRegion(new CellRangeAddress(2,2,0,2));  
  84.           
  85.         FileOutputStream fileOut = new FileOutputStream("d:\\test.xls");  
  86.         wb.write(fileOut);  
  87.         fileOut.close();  
  88.   
  89.   
  90.     }  
  91.   
  92. }  
package excel;

import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.DataFormat;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;


/***********************************************************************   
 *   
 *   poiCreate.java     
 *   @copyright       Copyright:   2009-2012     
 *   @creator         周辉<br/>   
 *   @create-time   Mar 9, 2010   2:27:52 PM   
 *   @revision         $Id:     *   
 ***********************************************************************/
public class poiCreate {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		//创建一个EXCEL
		Workbook wb = new HSSFWorkbook();
		DataFormat format = wb.createDataFormat();
		CellStyle style;
		//创建一个SHEET
	    Sheet sheet1 = wb.createSheet("产品清单");
	    String[] title = {"编号","产品名称","产品价格","产品数量","生产日期","产地","是否出口"};
	    int i=0;
	    //创建一行
	    Row row = sheet1.createRow((short)0);
	    //填充标题
	    for (String  s:title){
	    	Cell cell = row.createCell(i);
	    	cell.setCellValue(s);
	    	i++;
	    }
	    Row row1 = sheet1.createRow((short)1);
	    //下面是填充数据
	    row1.createCell(0).setCellValue(20071001);
	    row1.createCell(1).setCellValue("金鸽瓜子");
	    //创建一个单元格子
	    Cell cell2=row1.createCell(2);
	    // 填充产品价格
	    cell2.setCellValue(2.45);
	    style = wb.createCellStyle();
	    style.setDataFormat(format.getFormat("#.##"));
	    //设定样式
	    cell2.setCellStyle(style);
	    // 填充产品数量
	    row1.createCell(3).setCellValue(200);
	    /*  
         * 定义显示日期的公共格式  
         * 如:yyyy-MM-dd hh:mm  
         * */
	    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");   
        String newdate = sdf.format(new Date()); 
        // 填充出产日期   
	    row1.createCell(4).setCellValue(newdate);
	    row1.createCell(5).setCellValue("陕西西安");
	    /*  
         * 显示布尔值  
         * */ 
	    row1.createCell(6).setCellValue(true);
	    /*  
         * 合并单元格  
         * 通过writablesheet.mergeCells(int x,int y,int m,int n);来实现的  
         * 表示将first row, last row,first column,last column
         *   
         * */  
	    Row row2 = sheet1.createRow((short) 2);
	     Cell cell3 = row2.createCell((short) 0);
	     cell3.setCellValue("合并了三个单元格");
	    sheet1.addMergedRegion(new CellRangeAddress(2,2,0,2));
	    
	    FileOutputStream fileOut = new FileOutputStream("d:\\test.xls");
	    wb.write(fileOut);
	    fileOut.close();


	}

}

   上面代码2中方式生成 2张报表,涉及到基本生成报表中的几种单元格类型。

   POI 用的JAR poi-3.6-20091214.jar   jxl 用到的jar  jxl-2.6.jar

   2 种方式都相对比较好用,个人推荐使用POI (apache的项目)

     相关参考资料可以去官方网站查看

    http://poi.apache.org/spreadsheet/quick-guide.html


POI因为3.6Final之后大换血,提供对03以后微软Office格式支持。所以用3.6之间API写的东西要换到新API版本很痛苦。
提醒下有这方面需要的同志一定要用POI3.6以后的版本。



http://www.iteye.com/topic/611329

阅读更多
个人分类: Java
上一篇整数转RGB
下一篇Qt生成灰度图
想对作者说点什么? 我来说一句

poi jxl 生成EXCEL 报表

2011年02月10日 1.89MB 下载

java生成excel报表

2015年01月19日 10KB 下载

poi导入导出excel生成报表

2013年01月16日 4KB 下载

java生成报表所需的jar包

2015年08月28日 1.39MB 下载

LabVIEW实现报表生成

2011年07月23日 1.91MB 下载

jfreechart.jar

2010年01月07日 571KB 下载

jquery导出excel

2013年07月30日 180KB 下载

没有更多推荐了,返回首页

关闭
关闭