教你如何利用POI和JFreeChart框架實現生成Excel文件(生成 統計圖)

 首先,我介紹一下POI和JFreeChart吧,大家先上官網把這兩個框架的jar包下載下來。我也打包上傳了這兩個jar放到了CSDN上 歡迎大家去下載。地址是  http://yangchao228.download.csdn.net/

 

     Apache POI是Apache軟件基金會的開放源碼函式庫,POI提供API給Java程式對Microsoft Office格式檔案讀和寫的功能。

  結構:

  HSSF - 提供讀寫Microsoft Excel格式檔案的功能。

  XSSF - 提供讀寫Microsoft Excel OOXML格式檔案的功能。

  HWPF - 提供讀寫Microsoft Word格式檔案的功能。

  HSLF - 提供讀寫Microsoft PowerPoint格式檔案的功能。

  HDGF - 提供讀寫Microsoft Visio格式檔案的功能。

  可以創建Excel 文檔等。

 

 JFreeChart是JAVA平臺上的一個開放的圖表繪製類庫。它完全使用JAVA語言編寫,是爲applications, applets, servlets 以及JSP等使用所設計。JFreeChart可生成餅圖(pie charts)、柱狀圖(bar charts)、散點圖(scatter plots)、時序圖(time series)、甘特圖(Gantt charts)等等多種圖表,並且可以產生PNG和JPEG格式的輸出,還可以與PDF和EXCEL關聯JFreeChart截止2011年2月22日爲止的相當不錯的java圖形解決方案,基本能夠解決目前的圖形方面的需求

 

 

接下來我就展示我自己寫的代碼,我試過肯定可以運行的:

  1. package com.tudo.cyang.test;  
  2. import java.awt.Font;  
  3. import java.awt.image.BufferedImage;  
  4. import java.io.ByteArrayOutputStream;  
  5. import java.io.File;  
  6. import java.io.FileNotFoundException;  
  7. import java.io.FileOutputStream;  
  8. import java.io.IOException;  
  9. import java.io.OutputStream;  
  10. import javax.imageio.ImageIO;  
  11. import org.apache.poi.hssf.usermodel.HSSFClientAnchor;  
  12. import org.apache.poi.hssf.usermodel.HSSFPatriarch;  
  13. import org.apache.poi.hssf.usermodel.HSSFSheet;  
  14. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  15. import org.jfree.chart.ChartFactory;  
  16. import org.jfree.chart.ChartUtilities;  
  17. import org.jfree.chart.JFreeChart;  
  18. import org.jfree.chart.plot.PiePlot;  
  19. import org.jfree.chart.title.LegendTitle;  
  20. import org.jfree.chart.title.TextTitle;  
  21. import org.jfree.data.general.DefaultPieDataset;  
  22. /** 
  23.  * 由JFreeChart生成圖片放到硬盤上  
  24.  * 對於Swing程序可以由org.jfree.chart.ChartUtilities類完成圖片的生成 
  25.  *  
  26.  * @author  
  27.  *  
  28.  */  
  29. public class JfreeChartTest3 {  
  30.     private static FileOutputStream fileOut = null;  
  31.     private static BufferedImage bufferImg = null;  
  32.     //圖片生成的路徑  
  33.     private static String pathOfPicture = "E:/workspace/ExcelDemo/company.jpeg";  
  34.     //Excel生成的路徑  
  35.     private static String pathOfExcel = "E:/workspace/ExcelDemo/test.xls";  
  36.     public static void main(String[] args) {  
  37.         //JFreeChart畫圖  
  38.         JFreeChart chart = ChartFactory.createPieChart("某公司組織結構圖", getDataset(), truefalsefalse);  
  39.         chart.setTitle(new TextTitle("某公司組織結構圖"new Font("仿宋", Font.BOLD, 20)));  
  40.         LegendTitle legend = chart.getLegend(0);  
  41.         legend.setItemFont(new Font("隸書", Font.TYPE1_FONT, 16));  
  42.         PiePlot plot = (PiePlot) chart.getPlot();  
  43.         plot.setLabelFont(new Font("宋體", Font.HANGING_BASELINE, 12));  
  44.         try {  
  45.             OutputStream os = new FileOutputStream(pathOfPicture);  
  46.             //OutputStream osExl = new FileOutputStream("測試.xls");  
  47.             try {  
  48.                 // 由ChartUtilities生成文件到一個體outputStream中去  
  49.                 ChartUtilities.writeChartAsJPEG(os, chart, 1000800);  
  50.                 //ChartUtilities.writeChartAsJPEG(osExl, chart, 100, 80);  
  51.             } catch (IOException e) {  
  52.                 e.printStackTrace();  
  53.             }  
  54.         } catch (FileNotFoundException e) {  
  55.             e.printStackTrace();  
  56.         }  
  57.         //處理圖片文件,以便產生ByteArray  
  58.         ByteArrayOutputStream handlePicture = new ByteArrayOutputStream();  
  59.         handlePicture = handlePicture(pathOfPicture);  
  60.         //創建一個工作簿  
  61.         HSSFWorkbook wb = new HSSFWorkbook();  
  62.         HSSFSheet sheet = wb.createSheet("picture sheet");  
  63.         HSSFPatriarch patriarch = sheet.createDrawingPatriarch();  
  64.         HSSFClientAnchor anchor = new HSSFClientAnchor(0010050, (short11, (short1020);  
  65.         //插入圖片  
  66.         patriarch.createPicture(anchor, wb.addPicture(handlePicture.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));  
  67.         //寫入excel文件  
  68.         try {  
  69.             fileOut = new FileOutputStream(pathOfExcel);  
  70.             wb.write(fileOut);  
  71.         } catch (FileNotFoundException e) {  
  72.             // TODO Auto-generated catch block  
  73.             e.printStackTrace();  
  74.         } catch (IOException e) {  
  75.             // TODO Auto-generated catch block  
  76.             e.printStackTrace();  
  77.         } finally {  
  78.             if (fileOut != null) {  
  79.                 try {  
  80.                     fileOut.close();  
  81.                 } catch (IOException e) {  
  82.                     // TODO Auto-generated catch block  
  83.                     e.printStackTrace();  
  84.                 }  
  85.             }  
  86.         }  
  87.     }  
  88.     private static ByteArrayOutputStream handlePicture(String pathOfPicture) {  
  89.         ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();  
  90.         try {  
  91.             bufferImg = ImageIO.read(new File(pathOfPicture));  
  92.             ImageIO.write(bufferImg, "jpeg", byteArrayOut);  
  93.         } catch (IOException e) {  
  94.             // TODO Auto-generated catch block  
  95.             e.printStackTrace();  
  96.         }  
  97.         return byteArrayOut;  
  98.     }  
  99.     private static DefaultPieDataset getDataset() {  
  100.         DefaultPieDataset dpd = new DefaultPieDataset();  
  101.         dpd.setValue("管理人員"25);  
  102.         dpd.setValue("市場人員"10);  
  103.         dpd.setValue("開發人員"50);  
  104.         dpd.setValue("其它人員"15);  
  105.         return dpd;  
  106.     }  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章