`
youzifei
  • 浏览: 65935 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

jfreechart和poi一些简单的应用

阅读更多

这两天学习了一些jfreechart 和 poi操作excel 的方法。

仅作备忘吧。

 

先说饼图,柱图,折线图

饼图

 

数据使用 DefaultPieDataset进行封装

       DefaultPieDataset data=new DefaultPieDataset();

       data.setValue("高中以下", 0.1);
       data.setValue("高中", 0.1);
       data.setValue("大专", 0.1);
       data.setValue("本科", 0.1);
       data.setValue("硕士", 0.1);
       data.setValue("博士", 5);

 

将数据放到3d饼图类中

        PiePlot3D plot=new PiePlot3D(data);// 生成一个3D饼图
        JFreeChart chart=new JFreeChart("", JFreeChart.DEFAULT_TITLE_FONT, plot, true);// 生成一个图
        chart.setBackgroundPaint(java.awt.Color.white);// 可选,设置图片背景色
        chart.setTitle("程序员学历情况调查表-By Alpha");// 可选,设置图片标题

 

最后将chart 数据放byteArrayOutputStream 中,共其他的方法使用

 ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
        ChartUtilities.writeChartAsJPEG(byteArrayOutputStream, chart, 500, 300);

 

完整方法

private static void  genPieJPG() throws IOException {
        DefaultPieDataset data=new DefaultPieDataset();
        // 数据初始化
        // data.setValue("高中以下", 380);
        // data.setValue("高中", 1620);
        // data.setValue("大专", 6100);
        // data.setValue("本科", 8310);
        // data.setValue("硕士", 3520);
        // data.setValue("博士", 80);

        data.setValue("高中以下", 0.1);
        data.setValue("高中", 0.1);
        data.setValue("大专", 0.1);
        data.setValue("本科", 0.1);
        data.setValue("硕士", 0.1);
        data.setValue("博士", 5);

        PiePlot3D plot=new PiePlot3D(data);// 生成一个3D饼图
        JFreeChart chart=new JFreeChart("", JFreeChart.DEFAULT_TITLE_FONT, plot, true);// 生成一个图
        chart.setBackgroundPaint(java.awt.Color.white);// 可选,设置图片背景色
        chart.setTitle("程序员学历情况调查表-By Alpha");// 可选,设置图片标题
//        plot.setToolTipGenerator(new StandardPieToolTipGenerator());

        // 500是图片长度,300是图片高度
        // String filename = ServletUtilities.saveChartAsPNG(chart,500,300,info,session);
        ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
        ChartUtilities.writeChartAsJPEG(byteArrayOutputStream, chart, 500, 300);
        FileOutputStream file=new FileOutputStream("d:/a.jpg");
        file.write(byteArrayOutputStream.toByteArray());
        file.close();
    }

 

下面是图例

 

 

柱图

 

private static void  genBarJPG() throws IOException {
        // row keys...
        final String series1="First";

        // column keys...
        final String category1="Category 1";
        final String category2="Category 2";
        final String category3="Category 3";
        final String category4="Category 4";
        final String category5="Category 5";

        // create the dataset...
        final DefaultCategoryDataset dataset=new DefaultCategoryDataset();

        dataset.addValue(1.0, series1, category1);
        dataset.addValue(4.0, series1, category2);
        dataset.addValue(3.0, series1, category3);
        dataset.addValue(5.0, series1, category4);
        dataset.addValue(5.0, series1, category5);


        final JFreeChart chart=ChartFactory.createBarChart("中文", // chart title
            "类别", // domain axis label
            "四圣兽", // range axis label
            dataset, // data
            PlotOrientation.VERTICAL, // orientation
            true, // include legend
            true, // tooltips?
            true // URLs?
            );

        ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
        ChartUtilities.writeChartAsJPEG(byteArrayOutputStream, chart, 500, 300);

 

        FileOutputStream file=new FileOutputStream("d:/a.jpg");
        file.write(byteArrayOutputStream.toByteArray());
        file.close();

}

 

图例

 

 

折线图

 private static void  genLineJPG() throws IOException {
        // 数据源
        XYSeriesCollection seriesCollection=new XYSeriesCollection();
        XYSeries series1=new XYSeries("平均收视率");
        // x, y 都是数字型
        series1.add(1, 7.25);
        series1.add(2, 4.81);
        series1.add(3, 3.69);
        series1.add(4, 3.53);
        series1.add(5, 2.95);
        series1.add(6, 3.96);

        seriesCollection.addSeries(series1);
        /**
         * String title, // 图标题 String xAxisLabel x 轴标题 String yAxisLabel, y 轴标题 XYDataset dataset, 数据源 PlotOrientation orientation,
         * 显示方向 boolean legend, 是否显示图例 boolean tooltips, 是否显示 tooltip boolean urls 是否指定 url )
         **/
        JFreeChart chart=
            ChartFactory.createXYLineChart("无敌珊宝妹收视率走势图", "集数", "收视率百分点", seriesCollection, PlotOrientation.VERTICAL, true, true,
                false);

        ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
        ChartUtilities.writeChartAsJPEG(byteArrayOutputStream, chart, 500, 300);
         FileOutputStream file=new FileOutputStream("d:/a.jpg");
        file.write(byteArrayOutputStream.toByteArray());
        file.close();
    }

图例

 

 

 

一.POI简介

Jakarta POI 是apache的子项目,目标是处理ole2对象。它提供了一组操纵Windows文档的Java API

目前比较成熟的是HSSF接口,处理MS Excel(97-2002)对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象,你可以控制一些属性如sheet,cell等等。

二.HSSF概况

HSSF 是Horrible SpreadSheet Format的缩写,也即“讨厌的电子表格格式”。 也许HSSF的名字有点滑稽,就本质而言它是一个非常严肃、正规的API。通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。

HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。前者很好理解,后者比较抽象,但操作效率要高得多。

 

使用poi 写入操作

一个简单的操作流程,

先创建一个excel文件对象 HSSFWorkbook,

根据excel对象创建一个sheet,

根据sheet创建一个行对象,

向行对象写入数据,

将excel文件对象写入输出流或写入到文件中。

 

 

// 创建一个Excel文件

HSSFWorkbook wb=new HSSFWorkbook();

//获得CreationHelper对象,这个应该是一个帮助类 

//英文对这个类的解释  An object that handles instantiating concrete classes of the various instances one needs for HSSF and XSSF.
        CreationHelper createHelper=wb.getCreationHelper();

// 创建一个Excel的Sheet  
        HSSFSheet sheet=wb.createSheet("数据表");

 

 

//向excel中插入图片,在这里可以将上面的生成的图传递过来,插入到excel中

//start
        HSSFPatriarch patriarch=sheet.createDrawingPatriarch();
        HSSFClientAnchor anchor=new HSSFClientAnchor(0, 0, 512, 255, (short)1, 1, (short)10, 20);
        anchor.setAnchorType(3);
        patriarch.createPicture(anchor, wb.addPicture(baos.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));

//end

 

//向excel中写入数据

        for(int i=0; i < 10; i++) {
// Create a row and put some cells in it. Rows are 0 based.
            Row row=sheet.createRow(i);
// Create a cell and put a value in it.
            Cell cell=row.createCell(0);
            cell.setCellValue(1000);

 // Or do it on one line.
            row.createCell(1).setCellValue(1.2);
            row.createCell(2).setCellValue(createHelper.createRichTextString("中文"));
            row.createCell(3).setCellValue(true);
        }


// Write the output to a file
        FileOutputStream fileOut=new FileOutputStream("d:/workbook33.xls");
        wb.write(fileOut);
        fileOut.close();

 

 

 

最后生成图片如下

 

 

 

参考:

jfreechart

http://www.java2s.com/Code/Java/Chart/JFreeChartBarChartDemo.htm

 

http://liliugen.iteye.com/blog/510838

 

poi excel

http://ltc603.iteye.com/blog/30184

 

http://developer.51cto.com/art/201202/319070.htm

 

http://poi.apache.org/

  • 大小: 21.2 KB
  • 大小: 17.2 KB
  • 大小: 15.5 KB
  • 大小: 122.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics