JAVA用POI从Excel读取数据进行相关统计JFreeChart绘制图表.docx

上传人:b****6 文档编号:15313076 上传时间:2023-07-03 格式:DOCX 页数:16 大小:4.26MB
下载 相关 举报
JAVA用POI从Excel读取数据进行相关统计JFreeChart绘制图表.docx_第1页
第1页 / 共16页
JAVA用POI从Excel读取数据进行相关统计JFreeChart绘制图表.docx_第2页
第2页 / 共16页
JAVA用POI从Excel读取数据进行相关统计JFreeChart绘制图表.docx_第3页
第3页 / 共16页
JAVA用POI从Excel读取数据进行相关统计JFreeChart绘制图表.docx_第4页
第4页 / 共16页
JAVA用POI从Excel读取数据进行相关统计JFreeChart绘制图表.docx_第5页
第5页 / 共16页
JAVA用POI从Excel读取数据进行相关统计JFreeChart绘制图表.docx_第6页
第6页 / 共16页
JAVA用POI从Excel读取数据进行相关统计JFreeChart绘制图表.docx_第7页
第7页 / 共16页
JAVA用POI从Excel读取数据进行相关统计JFreeChart绘制图表.docx_第8页
第8页 / 共16页
JAVA用POI从Excel读取数据进行相关统计JFreeChart绘制图表.docx_第9页
第9页 / 共16页
JAVA用POI从Excel读取数据进行相关统计JFreeChart绘制图表.docx_第10页
第10页 / 共16页
JAVA用POI从Excel读取数据进行相关统计JFreeChart绘制图表.docx_第11页
第11页 / 共16页
JAVA用POI从Excel读取数据进行相关统计JFreeChart绘制图表.docx_第12页
第12页 / 共16页
JAVA用POI从Excel读取数据进行相关统计JFreeChart绘制图表.docx_第13页
第13页 / 共16页
JAVA用POI从Excel读取数据进行相关统计JFreeChart绘制图表.docx_第14页
第14页 / 共16页
JAVA用POI从Excel读取数据进行相关统计JFreeChart绘制图表.docx_第15页
第15页 / 共16页
JAVA用POI从Excel读取数据进行相关统计JFreeChart绘制图表.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

JAVA用POI从Excel读取数据进行相关统计JFreeChart绘制图表.docx

《JAVA用POI从Excel读取数据进行相关统计JFreeChart绘制图表.docx》由会员分享,可在线阅读,更多相关《JAVA用POI从Excel读取数据进行相关统计JFreeChart绘制图表.docx(16页珍藏版)》请在冰点文库上搜索。

JAVA用POI从Excel读取数据进行相关统计JFreeChart绘制图表.docx

JAVA用POI从Excel读取数据进行相关统计JFreeChart绘制图表

JAVA用POI从Excel读取数据进行相关统计,JFreeChart绘制图表

代码大概三百行吧,不多。

本来连接数据库做是个不错的选择,但是我刚刷了系统木有了又懒得装,从txt输入又感觉太low,最后就作死选择了以前从未尝试过的从Excel输入,并碰到了各种问题_(:

зゝ∠)_比如CannotgetaString valuefromanumericcell的异常错误,卡了我好久,直到无语地发现POI操作Excel时会无视Excel里的单元格设置,自判数据类型,所以还要使用setCellType.(*゜ー゜*)

实现步骤

(1)我用javax.swing.JFileChooser类来显示文件对话框,让用户选择一个Excel文件。

(2)使用ApachePOIAPI从Excel文件中读取数据,对Employee类进行批量初始化。

(3)实现公司员工收入的相关统计,这里我实现了人数统计、最大/最小工龄查找、最大/最小工资查找、男女比例、平均工资、平均年龄、平均工龄等。

(4)建立Dataset。

将你所想要显示的数据都放到这个库中。

(5)建立JFreeChart对象。

将你的dataset填入到这个对象中。

(6)处理Chart中文显示问题

(7)设置各种JFreeChart的属性与效果。

通过它提供的各种方法与接口设置相关的属性。

(8)用JFreeChart绘制图表,然后按照个人的需求进行执行。

(9)写界面,以swing形式输出。

测试截图

(1)生成消息对话框,要求用户选择一个Excel文件,单击“确定”

(2)生成文件选择器,我打开了存放在D盘BUAA文件夹里的Employee.xls

补充说明:

这是文件Employee.xls的内容

 

(3)进行相关统计,并通过消息对话框显示统计结果

 

(4)询问用户是否生成统计图,如果点“取消”或“否”,运行完毕;如果点是,系统将生成统计图,以员工为横轴,以年龄、工龄、工资三项数值为纵轴。

图表的显示效果会根据窗口大小自适应,改变横纵轴的比例尺。

下面是窗口最大化的效果

程序清单

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

publicclassEmployee{

StringID;

Stringname;

Stringsex;

doubleage;

doubleworkAge;

doublesal;

publicvoidsetID(StringID){

this.ID=ID;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicvoidsetSex(Stringsex){

this.sex=sex;

}

publicvoidsetAge(doubleage){

this.age=age;

}

publicvoidsetWorkAge(doubleworkAge){

this.workAge=workAge;

}

publicvoidsetSal(doublesal){

this.sal=sal;

}

}

一共有两个:

Employee.Java与EmployeeStatic.java

EmployeeStatic.java

importjava.awt.RenderingHints;

importjava.io.FileInputStream;

importjava.util.ArrayList;

import java.util.List;

importjavax.swing.JFileChooser;

importjavax.swing.JOptionPane;

//org.apache.poi

importorg.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

importorg.apache.poi.ss.usermodel.Cell;

importorg.apache.poi.ss.usermodel.Row;

import org.apache.poi.xssf.usermodel.XSSFSheet;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

//org.jfree

importorg.jfree.chart.ChartFactory;

importorg.jfree.chart.ChartFrame;

importorg.jfree.chart.JFreeChart;

importorg.jfree.chart.axis.CategoryAxis;

importorg.jfree.chart.axis.ValueAxis;

importorg.jfree.chart.plot.CategoryPlot;

importorg.jfree.chart.plot.PlotOrientation;

importorg.jfree.chart.title.TextTitle;

importorg.jfree.data.category.CategoryDataset;

importorg.jfree.data.category.DefaultCategoryDataset;

importjava.awt.Font; 

public class EmployeeStatics{

    public static void main(String[] args){

        // TODO Auto-generatedmethodstub

       JOptionPane.showMessageDialog(null,"\n您好,我是智能机器人小紫\n\n"

              + "很高兴为您提供员工数据统计分析服务\n\n"

              + "请选择一个Excel文件 ^_^\n\n",

               "选择Excel文件",JOptionPaneRMATION_MESSAGE);

       ArrayList Employees = null;

        //从Excel文件读取数据

           try {

               Employees = ReadFileUsingFileChooser();

          } catch (Exception e){

               // TODO Auto-generatedcatchblock

               e.printStackTrace();

        //人数统计 

        int n = Employees.size();

        //最大最小工资、工龄、工资初始化

        int maxA =0;

        int minA =Integer.MAX_VALUE;

        int maxWA =0;

        int minWA =Integer.MAX_VALUE;

        int maxS =0;

        int minS =Integer.MAX_VALUE;

        //男女性别人数

        int M =0;

        int FM =0;

        double sumS, sumA, sumWA, avgS, avgA, avgWA, MFM;

        sumS = sumA = sumWA =0;

        //遍历实现相关统计

        for (Employee e :

 Employees){

           if(e.age > maxA)

               maxA =(int) e.age;

           if(e.age < minA)

               minA =(int) e.age;

           if(e.workAge > maxWA)

               maxWA =(int) e.workAge;

           if(e.workAge < minWA)

               minWA =(int) e.workAge;

           if(e.sal > maxS)

               maxS =(int) e.sal;

           if(e.sal < minS)

               minS =(int) e.sal;

           sumS += e.sal;

           sumA += e.age;

           sumWA += e.workAge;

           if (e.sex.equals("男"))

               M++;

           if (e.sex.equals("女"))

               FM++;

        //计算平均值

        avgS = sumS / n;

        avgA = sumA / n;

        avgWA = sumWA / n;

        //计算男女比例

        MFM =(double) M / FM;

       JOptionPane.showMessageDialog(null,"员工人数为" + n + ",男女比例为" + MFM + "(男/女)\n"

              + "平均年龄为" + avgA + ",平均工龄为" + avgWA + ",平均工资为" + avgS + "\n"

              + "最高年龄为" + maxA + ",最低年龄为" + minA + ",最高工龄为" + maxWA + ",最低工龄为" + minWA + "\n"

              + "最高工资为" + maxS + "K,最低工资为" + minS + "K\n");

        int option=JOptionPane.YES_OPTION;

        option=JOptionPane.showConfirmDialog(null, "是否显示员工数据统计图?

");

        if (option==JOptionPane.YES_OPTION){

       CategoryDataset dataset = getDataSet(Employees); 

        //构造chart 

       JFreeChart chart =ChartFactory.createBarChart3D( 

                "员工数据统计图", // 图表标题 

                "员工属性", // 目录轴的显示标签--横轴 

                "数值", // 数值轴的显示标签--纵轴 

                dataset, // 数据集 

               PlotOrientation.VERTICAL, // 图表方向:

水平、 

                true, // 是否显示图例(对于简单的柱状图必须 

                false, // 是否生成工具 

                false // 是否生成URL链接 

        //处理chart中文显示问题 

        processChart(chart); 

        //chart 以swing形式输出 

       ChartFrame pieFrame = new ChartFrame("员工数据统计图", chart); 

        pieFrame.pack(); 

        pieFrame.setVisible(true);

    public static ArrayListReadFileUsingFileChooser()throws Exception{

        // TODO Auto-generatedmethodstub

       JFileChooser fileChooser = new JFileChooser();

        ArrayList temp = new ArrayList();

        if (fileChooser.showOpenDialog(null)==JFileChooser.APPROVE_OPTION){

          java.io.File file = fileChooser.getSelectedFile();

          FileInputStream fileIn = new FileInputStream(file);

           //根据指定的文件输入流导入Excel从而产生Workbook对象

          HSSFWorkbook wb0 = new HSSFWorkbook(fileIn);

           //获取Excel文档中的第一个表单

          HSSFSheet sht0 = wb0.getSheetAt(0);

           //对Sheet中的每一行进行迭代

           int r;

           int rowNum = sht0.getPhysicalNumberOfRows();

           for (r =1; r <= rowNum; r++){

              Row row = sht0.getRow(r);

               if (row == null){

                   break;

               //创建实体类

              Employee info=new Employee();

              //取出当前行第1个单元格数据,并封装在info实体stuName属性上

              row.getCell(0).(Cell.);

               info.setID(row.getCell(0).getStringCellValue());

              info.setName(row.getCell

(1).getStringCellValue());

               info.setSex(row.getCell

(2).getStringCellValue());

              info.setAge(row.getCell(3).getNumericCellValue());

              info.setWorkAge(row.getCell(4).getNumericCellValue());

              info.setSal(row.getCell(5).getNumericCellValue());

               temp.add(info);

           fileIn.close();  

        else {

          System.out.println("Nofileselected");

        return temp;

    //获取一个演示用的组合数据集对象

    private static CategoryDatasetgetDataSet(ArrayList Employees){ 

      DefaultCategoryDataset dataset = new DefaultCategoryDataset(); 

       for (Employee e :

 Employees){

       dataset.addValue(e.workAge, "工龄", e.name); 

       dataset.addValue(e.sal, "工资", e.name); 

       dataset.addValue(e.age, "年龄", e.name); 

       return dataset; 

    //解决图表汉字显示问题

    private static void processChart(JFreeChart chart){ 

       CategoryPlot plot = chart.getCategoryPlot(); 

       CategoryAxis domainAxis = plot.getDomainAxis(); 

       ValueAxis rAxis = plot.getRangeAxis(); 

        chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING, 

               RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); 

       TextTitle textTitle = chart.getTitle(); 

        textTitle.setFont(new Font("宋体",Font.PLAIN,20)); 

        domainAxis.setTickLabelFont(new Font("sans-serif",Font.PLAIN,11)); 

        domainAxis.setLabelFont(new Font("宋体",Font.PLAIN,12)); 

        rAxis.setTickLabelFont(new Font("sans-serif",Font.PLAIN,12)); 

        rAxis.setLabelFont(new Font("宋体",Font.PLAIN,12)); 

        chart.getLegend().setItemFont(new Font("宋体",Font.PLAIN,12)); 

        //renderer.setItemLabelGenerator(newLabelGenerator(0.0)); 

        //renderer.setItemLabelFont(newFont("宋体",Font.PLAIN,12)); 

        //renderer.setItemLabelsVisible(true); 

Employee.java

public class Employee{

   String ID;

   String name;

   String sex;

    double age;

    double workAge;

    double sal;

    public void setID(String ID){

        this.ID = ID;

    public void setName(String name){

        this.name = name;

    public void setSex(String sex){

        this.sex = sex;

    public void setAge(double age){

        this.age = age;

    public void setWorkAge(double workAge){

        this.workAge = workAge;

    public void setSal(double sal){

        this.sal = sal;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2