收藏 分享(赏)

java用poi从excel读取数据进行相关统计,jfreechart绘制图表.docx

上传人:dzzj200808 文档编号:3164144 上传时间:2018-10-05 格式:DOCX 页数:18 大小:4.29MB
下载 相关 举报
java用poi从excel读取数据进行相关统计,jfreechart绘制图表.docx_第1页
第1页 / 共18页
java用poi从excel读取数据进行相关统计,jfreechart绘制图表.docx_第2页
第2页 / 共18页
java用poi从excel读取数据进行相关统计,jfreechart绘制图表.docx_第3页
第3页 / 共18页
java用poi从excel读取数据进行相关统计,jfreechart绘制图表.docx_第4页
第4页 / 共18页
java用poi从excel读取数据进行相关统计,jfreechart绘制图表.docx_第5页
第5页 / 共18页
点击查看更多>>
资源描述

1、JAVA 用 POI 从 Excel 读取数据进行相关统计, JFreeChart 绘制图表代码大概三百行吧,不多。本来连接数据库做是个不错的选择,但是我刚刷了系统木有了又懒得装,从 txt 输入又感觉太 low,最后就作死选择了以前从未尝试过的从Excel 输入,并碰到了各种问题_(: )_比如 Cannot get a String value from a numeric cell 的异常错误,卡了我好久,直到无语地发现 POI 操作 Excel 时会无视Excel 里的单元格设置,自判数据类型,所以还要使用 setCellType.(*)实现步骤(1)我用 javax.swing.JF

2、ileChooser 类来显示文件对话框,让用户选择一个 Excel 文件。(2)使用 Apache POI API 从 Excel 文件中读取数据,对 Employee 类进行批量初始化。(3)实现公司员工收入的相关统计,这里我实现了人数统计、最大/最小工龄查找、最大/最小工资查找、男女比例、平均工资、平均年龄、平均工龄等。(4)建立 Dataset。将你所想要显示的数据都放到这个库中。(5)建立 JFreeChart 对象。将你的 dataset 填入到这个对象中。(6)处理 Chart 中文显示问题(7)设置各种 JFreeChart 的属性和效果。通过它提供的各种方法和接口设置相关的属

3、性。(8)用 JFreeChart 绘制图表,然后按照个人的需求进行执行。(9)写界面,以 swing 形式输出。测试截图(1)生成消息对话框,要求用户选择一个 Excel 文件,单击“确定”(2)生成文件选择器,我打开了存放在 D 盘 BUAA 文件夹里的 Employee.xls补充说明:这是文件 Employee.xls 的内容(3)进行相关统计,并通过消息对话框显示统计结果(4)询问用户是否生成统计图,如果点“取消”或“否”,运行完毕;如果点是,系统将生成统计图,以员工为横轴,以年龄、工龄、工资三项数值为纵轴。图表的显示效果会根据窗口大小自适应,改变横纵轴的比例尺。下面是窗口最大化的效

4、果程序清单123456789public class Employee String ID;String name;String sex;double age;double workAge;double sal;public void setID(String ID) 1011121314151617181920212223242526272829303132this.ID = ID;public void setName(String name) this.name = name;public void setSex(String sex) this.sex = sex;public voi

5、d setAge(double age) this.age = age;public void setWorkAge(double workAge) this.workAge = workAge;public void setSal(double sal) this.sal = sal;一共有两个:Employee.Java 和 EmployeeStatic.javaEmployeeStatic.javaimportjava.awt.RenderingHints;importjava.io.FileInputStream;importjava.util.ArrayList;import jav

6、a.util.List;importjavax.swing.JFileChooser;importjavax.swing.JOptionPane;/org.apache.poiimportorg.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.XS

7、SFSheet;import org.apache.poi.xssf.usermodel.XSSFWorkbook;/org.jfreeimportorg.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.jfre

8、e.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-generated method stubJOptionPane.sh

9、owMessageDialog(null,“n 您好,我是智能机器人小紫nn“+ “很高兴为您提供员工数据统计分析服务nn“+ “请选择一个 Excel 文件 _nn“,“选择 Excel 文件“,JOptionPane.INFORMATION_MESSAGE );ArrayList Employees = null;/从 Excel 文件读取数据try Employees = ReadFileUsingFileChooser(); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();/人数统计 in

10、t 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 : Emplo

11、yees) if(e.age maxA)maxA = (int) e.age;if(e.age maxWA)maxWA = (int) e.workAge;if(e.workAge maxS)maxS = (int) e.sal;if(e.sal ReadFileUsingFileChooser()throws Exception / TODO Auto-generated method stubJFileChooser fileChooser = new JFileChooser();ArrayList temp = new ArrayList();if (fileChooser.showO

12、penDialog(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 中的每一行进行迭代i

13、nt r;int rowNum = sht0.getPhysicalNumberOfRows();for (r = 1; r 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

14、; /解决图表汉字显示问题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_

15、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.setLabelFon

16、t(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.javapublic class Employee String ID;Strin

17、g 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;

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

当前位置:首页 > 网络科技 > Java

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报