java利用jfreechart绘制excel

合集下载

java创建excel的常用方法

java创建excel的常用方法

java创建excel的常用方法
Java中创建Excel文件有多种方法,以下是一些常用的方法:
1. Apache POI库,Apache POI是一个用于读写Microsoft Office文件的开源库,可以使用它来创建和编辑Excel文件。

通过POI库,可以创建工作簿(Workbook)、工作表(Sheet)、单元格(Cell)等对象,然后填充数据并保存为Excel文件。

这是Java中
创建Excel文件最常用的方法之一。

2. JExcelApi库,JExcelApi也是一个用于操作Excel文件的
开源库,它提供了创建、读取和修改Excel文件的功能。

通过JExcelApi,可以创建工作簿、工作表,并向单元格中写入数据,最
后保存为Excel文件。

3. 使用Java的CSV库,虽然CSV文件不是真正的Excel文件,但在某些情况下也可以满足需求。

Java中有一些CSV库可以用来创
建和编辑CSV文件,例如OpenCSV和uniVocity等。

这些库可以将
数据写入CSV格式的文件,然后可以通过Excel等软件打开并保存
为Excel文件。

4. 使用第三方Excel库,除了上述提到的库外,还有一些第三
方的商业库,如Aspose.Cells,可以用来创建和编辑Excel文件。

这些库通常提供了更丰富的功能和更好的性能,但需要购买许可证。

总的来说,以上列举的方法是Java中创建Excel文件的常用方法。

选择合适的方法取决于具体的需求和项目的要求。

希望这些信
息能够帮助到你。

Java操作Excel之JXL(填充EXCEL模板)转载

Java操作Excel之JXL(填充EXCEL模板)转载

Java操作Excel之JXL(填充EXCEL模板)转载Java操作Excel之理解JXL--读取Excel 说到如何⽤JXL读取Excel⽂件,现在来看看如何读取Excel模板然后把动态数据写⼊到模板以⽣成特定格式的Excel。

同样的思路,先来考虑下会涉及到那些对象,和上篇⽂章读取相⽐这⾥涉及到⼀个写⼊的步骤,所以JXL必然会提供⼀个对象来⽀持写⼊,这就是WritableWorkbook。

那么如何得到到这个类的实例,查看APIDoc发现Workbook类提供了⼏个静态的createWorkbook⽅法返回WritableWorkbook实例,可以看到众多createWorkbook⽅法主要分为两类:⼀个参数和两个参数。

简单分析可以得知前者仅仅是⽤来直接⽣成Excel⽂件,后者先读取模板再向模板写⼊数据然后⽣成Excel。

(还有⼀个三参数⽅法加上⼀个⽤来设置workbook的参数)现在按照上篇⽂章中所讲述的流程来看看读取模板并写⼊需要那些步骤。

第⼀步:选择模板⽂件:Workbook wb = Workbook.getWorkbook(new File(realpath));第⼆步:通过模板得到⼀个可写的Workbook:WritableWorkbook wwb = Workbook.createWorkbook(targetFile, wb);第⼀个参数是⼀个输出流对象,⽐如可以ByteArrayOutputStream targetFile = new ByteArrayOutputStream();这样定义这个输出流对象。

第⼆个参数代表了要读取的模板。

第三步:选择模板中名称为StateResult的Sheet:WritableSheet wws = wwb.getSheet("StateResult");如果需要也可以创建SheetWritableSheet wws = wwb.createSheet("Sheet名称",i);第四步:选择单元格,写⼊动态值,根据单元格的不同类型转换成相应类型的单元格:Label A1 = (Label)wws.getWritableCell(0,0);A1.setString("单元格内容")或Number A2 = (Number)wws.getWritableCell(0,1);//Number是jxl.write.NumberA2.setValue(3.3);也可以创建新的单元格并且加⼊到Sheet中Label C1 = new Label(2,0,"单元格内容");wws.addCell(C1);或Number C1 = new Number(2,0,3.3);wws.addCell(C1);在⽣成Excel报表的时候还会遇到⼀种需求就是数据的格式问题,我们可能希望数值型单元格以某种格式显⽰,⽽字符串型单元格以另⼀种格式显⽰。

关于JfreeChart柱状图,数值显示的问题

关于JfreeChart柱状图,数值显示的问题

关于JfreeChart柱状图,数值显示的问题关于JfreeChart柱状图,数值显示的问题你试试这句话:BarRenderer renderer=new BarRenderer();renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());renderer.setBaseItemLabelsVisible(true);关于JFreeChart生成柱状图的问题,急!一个简单的方法根据PlotRenderingInfo 获得getDataArea() getPlotArea()PlotArea 包括座标轴 getDataArea 只有影象两个区域相减,左边的就是纵轴的区域。

关于Excel柱状图的问题++++57132899++++图表是通过资料位置生成的jfreechart 柱状图横轴下方的图示的排列问题:jfree./jfreechart/samples.这个是Demo。

点选web start 启动例子,里面有很多很多的例子有一个例子叫LegendWrapperDemo1.java 的那个demo 就是竖着排的。

柱中用不同颜色的也有。

我的专案中用的就是不同颜色的,在demo里的Bar Charts -Stacked的目录下都是那种例子。

我就是照那个做的。

原始码在;:sourcefe./projects/jfreechart/files/这个页面上下载。

jfreechart是开源的。

技术支援的文件是收费的怎么在jqplot 柱状图每条柱上显示数值axes: { xaxis: { label: "X 轴文字" } 看看例子就能发现啊$(document).ready(function(){ var plot2 = $.jqplot ('chart2', [[3,7,9,1,4,6,8,2,5]], { Give the plot a title. title: 'Plot With Options', You can specify options for...点“柱状图里的柱子”——右键——资料系列格式——资料标志——值(勾选)——确定java中使用jfreechart做柱状图,在jsp中显示有问题,jfreechart中显示柱状图到jsp页面:package .test.jfreechart;import java.awt.Font;import javax.swing.JPanel;import .jfree.chart.ChartFactory;import .jfree.chart.ChartPanel;import .jfree.chart.JFreeChart;import .jfree.chart.axis.CategoryAxis;import .jfree.chart.plot.CategoryPlot;import .jfree.chart.plot.PlotOrientation;import .jfree.chart.title.TextTitle;import .jfree.data.category.CategoryDataset;import .jfree.data.category.DefaultCategoryDataset;import .jfree.ui.ApplicationFrame;public class JFreeChartTest2 extends ApplicationFrame{public JFreeChartT est2(String title){super(title);this.setContentPane(createPanel()); 建构函式中自动建立Java 的panel面板}public static CategoryDataset createDataset() 建立柱状图资料集{DefaultCategoryDataset dataset=new DefaultCategoryDataset();dataset.setValue(10,"a","管理人员");dataset.setValue(20,"b","市场人员");dataset.setValue(40,"c","开发人员");dataset.setValue(15,"d","其他人员");return dataset;}public static JFreeChart createChart(CategoryDataset dataset) 用资料集建立一个图表{JFreeChart chart=ChartFactory.createBarChart("hi", "人员分布","人员数量", dataset, PlotOrientation.VERTICAL, true, true, false); 建立一个JFreeChartchart.setTitle(new TextTitle("某公司组织结构图",new Font("宋体",Font.BOLD+Font.ITALIC,20)));可以重新设定标题,替换“hi”标题CategoryPlot plot=(CategoryPlot)chart.getPlot();获得图示中间部分,即plotCategoryAxis categoryAxis=plot.getDomainAxis();获得横座标categoryAxis.setLabelFont(new Font("微软雅黑",Font.BOLD,12));设定横座标字型return chart;}public static JPanel createPanel(){JFreeChart chart =createChart(createDataset());return new ChartPanel(chart); 将chart物件放入Panel面板中去,ChartPanel类已继承Jpanel}public static void main(String[] args){JFreeChartTest2 chart=new JFreeChartTest2("某公司组织结构图");chart.pack();以合适的大小显示chart.setVisible(true);}}执行结果:java jfreechart 柱状图设定问题,求解参考答案总有一天,我会丢下我所有的疲倦和理想,带着我的相机,远离繁华,面向空旷。

java操作Excel 详解

java操作Excel 详解

{ for ( int j = 0 ; j < columnum; j ++ ) {
Cell cell1 = sheet.getCell(j, i);
String result = cell1.getContents(); System.out.print(result);
System.out.print( " \t " );
JXL 操作 Excel
Jxl create 代码 java 表格操作类库 jxl poi jxl 是一个韩国人写的 java 操作 excel 的工具, 在开源世界中,有两套比较有影响的 API 可供使用,一 个是 POI,一个是 jExcelAPI。其中功能相对 POI 比较弱一点。但 jExcelAPI 对中文支持非常好,API 是纯 Java 的,并不依赖 Windows 系统,即使运行在 Linux 下,它同样能够正确的处理 Excel 文件。另 外需要说明的是,这套 API 对图形和图表的支持很有限,而且仅仅识别 PNG 格式。 使用如下: 搭建环境 将下载后的文件解包,得到 jxl.jar,放入 classpath,安装就完成了。 基本操作 一、创建、写入文件 拟生成一个名为“test.xls”的 Excel 文件,其中第一个工作表被命名为 “第一页”,大致效果如下: package test;
public class UpdateExcel { public static void main(String args[]) { try { // Excel 获得文件 Workbook wb = Workbook.getWorkbook( new File( " test.xls " )); // 打开一个文件的副本,并且指定数据写回到原文件 WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ), wb); // 添加一个工作表 WritableSheet sheet = book.createSheet( " 第二页 " , 1 ); sheet.addCell( new Label( 0 , 0 , " 第二页的测试数据 " )); book.write(); book.close(); } catch (Exception e) { System.out.println(e); } }

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

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

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

本来连接数据库做是个不错的选择,但是我刚刷了系统木有了又懒得装,从txt输入又感觉太low,最后就作死选择了以前从未尝试过的从Excel 输入,并碰到了各种问题_(:зゝ∠)_比如Cannot get a String value from a numeric cell 的异常错误,卡了我好久,直到无语地发现POI操作Excel时会无视Excel里的单元格设置,自判数据类型,所以还要使用setCellType.(*゜ー゜*)实现步骤(1)我用javax.swing.JFileChooser类来显示文件对话框,让用户选择一个Excel文件。

(2)使用Apache POI API从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 8public class Employee {String ID;String name;String sex;double age;double workAge;double sal;9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32public void setID(String ID) {this.ID = ID;}public void setName(String 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;}}一共有两个:Employee.Java和EmployeeStatic.javaEmployeeStatic.javaimport java.awt.RenderingHints;import java.io.FileInputStream;import java.util.ArrayList;import java.util.List;import javax.swing.JFileChooser;import javax.swing.JOptionPane;//org.apache.poiimport ermodel.HSSFSheet;import ermodel.HSSFWorkbook;import ermodel.Cell;import ermodel.Row;import ermodel.XSSFSheet;import ermodel.XSSFWorkbook;//org.jfreeimport org.jfree.chart.ChartFactory;import org.jfree.chart.ChartFrame;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.CategoryAxis;import org.jfree.chart.axis.ValueAxis;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.title.TextTitle;import org.jfree.data.category.CategoryDataset;import org.jfree.data.category.DefaultCategoryDataset;import java.awt.Font;public class EmployeeStatics {public static void main(String[] args) {// TODO Auto-generated method stubJOptionPane.showMessageDialog(null,"\n您好,我是智能机器人小紫\n\n" + "很高兴为您提供员工数据统计分析服务\n\n"+ "请选择一个Excel文件 ^_^\n\n","选择Excel文件",RMATION_MESSAGE); ArrayList<Employee> Employees = null;//从Excel文件读取数据try {Employees = ReadFileUsingFileChooser();} catch (Exception e) {// TODO Auto-generated catch blocke.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);//构造chartJFreeChart 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 ArrayList<Employee>ReadFileUsingFileChooser()throws Ex ception {// TODO Auto-generated method stubJFileChooser 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("No file selected");}return temp;}//获取一个演示用的组合数据集对象private static CategoryDatasetgetDataSet(ArrayList<Employee> Employe es) {DefaultCategoryDataset dataset = new DefaultCategoryDataset();for (Employee e : Employees){dataset.addValue(e.workAge, "工龄", );dataset.addValue(e.sal, "工资", );dataset.addValue(e.age, "年龄", );}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_ANTIALIASI NG,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.javapublic 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) { = 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动态生成带下拉框的Excel导入模板

java动态生成带下拉框的Excel导入模板

java动态⽣成带下拉框的Excel导⼊模板在实际开发中,由于业务需要,常常需要进⾏Excel导⼊导出操作。

以前做⼀些简单的导⼊时,先准备⼀个模板,再进⾏导⼊,单有⼗⼏、⼆⼗⼏个导⼊模板时,往往要做⼗⼏、⼆⼗⼏个模板。

⽽且,当在模板中需要有下拉框,⽽且下拉数据要实时查询时,这样的⽅法就不太好了;现在,做成了动态⽣成导⼊模板,只要参数传对了,就可以⽣成任何我们想要的导⼊模板,⽽且随意设置下拉框的数⽬、位置。

具体步骤如下:1、需要⽤到的jar包:poi-3.10-FINAL.jarpoi-ooxml-3.10-FINAL.jarpoi-ooxml-schemas-3.10-FINAL.jargradle引⼊:compile group: 'org.apache.poi', name: 'poi', version: '3.10'compile group: 'org.apache.poi', name: 'poi-ooxml', version: '3.10-FINAL'2、⽣成Excel导⼊模板 :/*** @Title: createExcelTemplate* @Description: ⽣成Excel导⼊模板* @param@param filePath Excel⽂件路径* @param@param handers Excel列标题(数组)* @param@param downData 下拉框数据(数组)* @param@param downRows 下拉列的序号(数组,序号从0开始)* @return void* @throws*/private static void createExcelTemplate(String filePath, String[] handers,List<String[]> downData, String[] downRows){HSSFWorkbook wb = new HSSFWorkbook();//创建⼯作薄//表头样式HSSFCellStyle style = wb.createCellStyle();style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建⼀个居中格式//字体样式HSSFFont fontStyle = wb.createFont();fontStyle.setFontName("微软雅⿊");fontStyle.setFontHeightInPoints((short)12);fontStyle.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);style.setFont(fontStyle);//新建sheetHSSFSheet sheet1 = wb.createSheet("Sheet1");HSSFSheet sheet2 = wb.createSheet("Sheet2");HSSFSheet sheet3 = wb.createSheet("Sheet3");//⽣成sheet1内容HSSFRow rowFirst = sheet1.createRow(0);//第⼀个sheet的第⼀⾏为标题//写标题for(int i=0;i<handers.length;i++){HSSFCell cell = rowFirst.createCell(i); //获取第⼀⾏的每个单元格sheet1.setColumnWidth(i, 4000); //设置每列的列宽cell.setCellStyle(style); //加样式cell.setCellValue(handers[i]); //往单元格⾥写数据}//设置下拉框数据String[] arr = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};int index = 0;HSSFRow row = null;for(int r=0;r<downRows.length;r++){String[] dlData = downData.get(r);//获取下拉对象int rownum = Integer.parseInt(downRows[r]);if(dlData.length<5){ //255以内的下拉//255以内的下拉,参数分别是:作⽤的sheet、下拉内容数组、起始⾏、终⽌⾏、起始列、终⽌列sheet1.addValidationData(setDataValidation(sheet1, dlData, 1, 50000, rownum ,rownum)); //超过255个报错} else { //255以上的下拉,即下拉列表元素很多的情况//1、设置有效性//String strFormula = "Sheet2!$A$1:$A$5000" ; //Sheet2第A1到A5000作为下拉列表来源数据String strFormula = "Sheet2!$"+arr[index]+"$1:$"+arr[index]+"$5000"; //Sheet2第A1到A5000作为下拉列表来源数据sheet2.setColumnWidth(r, 4000); //设置每列的列宽//设置数据有效性加载在哪个单元格上,参数分别是:从sheet2获取A1到A5000作为⼀个下拉的数据、起始⾏、终⽌⾏、起始列、终⽌列 sheet1.addValidationData(SetDataValidation(strFormula, 1, 50000, rownum, rownum)); //下拉列表元素很多的情况//2、⽣成sheet2内容for(int j=0;j<dlData.length;j++){if(index==0){ //第1个下拉选项,直接创建⾏、列row = sheet2.createRow(j); //创建数据⾏sheet2.setColumnWidth(j, 4000); //设置每列的列宽row.createCell(0).setCellValue(dlData[j]); //设置对应单元格的值} else { //⾮第1个下拉选项int rowCount = sheet2.getLastRowNum();//System.out.println("========== LastRowNum =========" + rowCount);if(j<=rowCount){ //前⾯创建过的⾏,直接获取⾏,创建列//获取⾏,创建列sheet2.getRow(j).createCell(index).setCellValue(dlData[j]); //设置对应单元格的值} else { //未创建过的⾏,直接创建⾏、创建列sheet2.setColumnWidth(j, 4000); //设置每列的列宽//创建⾏、创建列sheet2.createRow(j).createCell(index).setCellValue(dlData[j]); //设置对应单元格的值}}}index++;}}try {File f = new File(filePath); //写⽂件//不存在则新增if(!f.getParentFile().exists()){f.getParentFile().mkdirs();}if(!f.exists()){f.createNewFile();}FileOutputStream out = new FileOutputStream(f);out.flush();wb.write(out);out.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}3、设置有效性:/**** @Title: SetDataValidation* @Description: 下拉列表元素很多的情况 (255以上的下拉)* @param@param strFormula* @param@param firstRow 起始⾏* @param@param endRow 终⽌⾏* @param@param firstCol 起始列* @param@param endCol 终⽌列* @param@return* @return HSSFDataValidation* @throws*/private static HSSFDataValidation SetDataValidation(String strFormula,int firstRow, int endRow, int firstCol, int endCol) {// 设置数据有效性加载在哪个单元格上。

免费 jfreechart_生成折线图,饼图,柱状图,堆栈柱状图

免费 jfreechart_生成折线图,饼图,柱状图,堆栈柱状图

最近公司使用jfreechart来生成统计图,使用了折线图,饼图等,因为用的1.0.8a版的jfreechart,与1.0.0版本的地方有很多不同,而且图片生成清晰度比老版的高,如下是我做的demo.1.所需包(1) jfreechart-1.0.8a.jar(2) jcommon-1.0.12.jar2.运行环境JDK 1.53.源代码import java.awt.Color;import java.awt.Font;import java.io.File;import java.io.FileOutputStream;import java.text.DecimalFormat;import java.text.NumberFormat;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.CategoryAxis;import org.jfree.chart.axis.CategoryLabelPositions;import org.jfree.chart.axis.NumberAxis;import org.jfree.chart.axis.V alueAxis;import bels.StandardCategoryItemLabelGenerator;import bels.StandardPieSectionLabelGenerator;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.PiePlot3D;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.renderer.category.BarRenderer;import org.jfree.chart.renderer.category.LineAndShapeRenderer;import org.jfree.chart.renderer.category.StackedBarRenderer;import org.jfree.chart.title.TextTitle;import org.jfree.data.category.CategoryDataset;import org.jfree.data.general.DatasetUtilities;import org.jfree.data.general.DefaultPieDataset;import org.jfree.data.general.PieDataset;/*** 实际取色的时候一定要16位的,这样比较准确** @author new*/public class CreateChartServiceImpl{private static final String CHART_PA TH = "E:/test/";public static void main(String[] args){// TODO Auto-generated method stubCreateChartServiceImpl pm = new CreateChartServiceImpl();// 生成饼状图pm.makePieChart();// 生成单组柱状图pm.makeBarChart();// 生成多组柱状图pm.makeBarGroupChart();// 生成堆积柱状图pm.makeStackedBarChart();// 生成折线图pm.makeLineAndShapeChart();}/*** 生成折线图*/public void makeLineAndShapeChart(){double[][] data = new double[][]{{ 672, 766, 223, 540, 126 },{ 325, 521, 210, 340, 106 },{ 332, 256, 523, 240, 526 } };String[] rowKeys ={ "苹果", "梨子", "葡萄" };String[] columnKeys ={ "北京", "上海", "广州", "成都", "深圳" };CategoryDataset dataset = getBarData(data, rowKeys, columnKeys); createTimeXYChar("折线图", "x轴", "y轴", dataset, "lineAndShap.png"); }/*** 生成分组的柱状图*/public void makeBarGroupChart(){double[][] data = new double[][]{ 672, 766, 223, 540, 126 },{ 325, 521, 210, 340, 106 },{ 332, 256, 523, 240, 526 } };String[] rowKeys ={ "苹果", "梨子", "葡萄" };String[] columnKeys ={ "北京", "上海", "广州", "成都", "深圳" };CategoryDataset dataset = getBarData(data, rowKeys, columnKeys); createBarChart(dataset, "x坐标", "y坐标", "柱状图", "barGroup.png");}/*** 生成柱状图*/public void makeBarChart(){double[][] data = new double[][]{{ 672, 766, 223, 540, 126 } };String[] rowKeys ={ "苹果" };String[] columnKeys ={ "北京", "上海", "广州", "成都", "深圳" };CategoryDataset dataset = getBarData(data, rowKeys, columnKeys); createBarChart(dataset, "x坐标", "y坐标", "柱状图", "bar.png");}/*** 生成堆栈柱状图*/public void makeStackedBarChart(){double[][] data = new double[][]{{ 0.21, 0.66, 0.23, 0.40, 0.26 },{ 0.25, 0.21, 0.10, 0.40, 0.16 } };String[] rowKeys ={ "苹果", "梨子" };String[] columnKeys ={ "北京", "上海", "广州", "成都", "深圳" };CategoryDataset dataset = getBarData(data, rowKeys, columnKeys); createStackedBarChart(dataset, "x坐标", "y坐标", "柱状图", "stsckedBar.png"); }/*** 生成饼状图*/public void makePieChart(){double[] data ={ 9, 91 };String[] keys ={ "失败率", "成功率" };createValidityComparePimChar(getDataPieSetByUtil(data, keys), "饼状图", "pie2.png", keys);}// 柱状图,折线图数据集public CategoryDataset getBarData(double[][] data, String[] rowKeys, String[] columnKeys){return DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);}// 饼状图数据集public PieDataset getDataPieSetByUtil(double[] data,String[] datadescription){if (data != null && datadescription != null){if (data.length == datadescription.length){DefaultPieDataset dataset = new DefaultPieDataset();for (int i = 0; i < data.length; i++){dataset.setValue(datadescription[i], data[i]);}return dataset;}}return null;/*** 柱状图**@param dataset 数据集* @param xName x轴的说明(如种类,时间等)* @param yName y轴的说明(如速度,时间等)* @param chartTitle 图标题* @param charName 生成图片的名字* @return*/public String createBarChart(CategoryDataset dataset, String xName,String yName, String chartTitle, String charName){JFreeChart chart = ChartFactory.createBarChart(chartTitle, // 图表标题xName, // 目录轴的显示标签yName, // 数值轴的显示标签dataset, // 数据集PlotOrientation.VERTICAL, // 图表方向:水平、垂直true, // 是否显示图例(对于简单的柱状图必须是false)false, // 是否生成工具false // 是否生成URL链接);Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);/** V ALUE_TEXT_ANTIALIAS_OFF表示将文字的抗锯齿关闭,* 使用的关闭抗锯齿后,字体尽量选择12到14号的宋体字,这样文字最清晰好看*///chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.V ALUE_TEXT_ANTIALIAS_OFF);chart.setTextAntiAlias(false);chart.setBackgroundPaint(Color.white);// create plotCategoryPlot plot = chart.getCategoryPlot();// 设置横虚线可见plot.setRangeGridlinesVisible(true);// 虚线色彩plot.setRangeGridlinePaint(Color.gray);// 数据轴精度NumberAxis vn = (NumberAxis) plot.getRangeAxis();// vn.setAutoRangeIncludesZero(true);DecimalFormat df = new DecimalFormat("#0.00");vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式// x轴设置CategoryAxis domainAxis = plot.getDomainAxis();domainAxis.setLabelFont(labelFont);// 轴标题domainAxis.setTickLabelFont(labelFont);// 轴数值// Lable(Math.PI/3.0)度倾斜// domainAxis.setCategoryLabelPositions(CategoryLabelPositions// .createUpRotationLabelPositions(Math.PI / 3.0));domainAxis.setMaximumCategoryLabelWidthRatio(0.6f);// 横轴上的Lable 是否完整显示// 设置距离图片左端距离domainAxis.setLowerMargin(0.1);// 设置距离图片右端距离domainAxis.setUpperMargin(0.1);// 设置columnKey 是否间隔显示// domainAxis.setSkipCategoryLabelsToFit(true);plot.setDomainAxis(domainAxis);// 设置柱图背景色(注意,系统取色的时候要使用16位的模式来查看颜色编码,这样比较准确)plot.setBackgroundPaint(new Color(255, 255, 204));// y轴设置ValueAxis rangeAxis = plot.getRangeAxis();rangeAxis.setLabelFont(labelFont);rangeAxis.setTickLabelFont(labelFont);// 设置最高的一个Item 与图片顶端的距离rangeAxis.setUpperMargin(0.15);// 设置最低的一个Item 与图片底端的距离rangeAxis.setLowerMargin(0.15);plot.setRangeAxis(rangeAxis);BarRenderer renderer = new BarRenderer();// 设置柱子宽度renderer.setMaximumBarWidth(0.05);// 设置柱子高度renderer.setMinimumBarLength(0.2);// 设置柱子边框颜色renderer.setBaseOutlinePaint(Color.BLACK);// 设置柱子边框可见renderer.setDrawBarOutline(true);// // 设置柱的颜色renderer.setSeriesPaint(0, new Color(204, 255, 255));renderer.setSeriesPaint(1, new Color(153, 204, 255));renderer.setSeriesPaint(2, new Color(51, 204, 204));// 设置每个地区所包含的平行柱的之间距离renderer.setItemMargin(0.0);// 显示每个柱的数值,并修改该数值的字体属性renderer.setIncludeBaseInRange(true);renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); renderer.setBaseItemLabelsVisible(true);plot.setRenderer(renderer);// 设置柱的透明度plot.setForegroundAlpha(1.0f);FileOutputStream fos_jpg = null;try{isChartPathExist(CHART_PATH);String chartName = CHART_PA TH + charName;fos_jpg = new FileOutputStream(chartName);ChartUtilities.writeChartAsPNG(fos_jpg, chart, 500, 500, true, 10);return chartName;}catch (Exception e){e.printStackTrace();return null;}finally{try{fos_jpg.close();}catch (Exception e){e.printStackTrace();}}/*** 横向图** @param dataset 数据集* @param xName x轴的说明(如种类,时间等)* @param yName y轴的说明(如速度,时间等)* @param chartTitle 图标题* @param charName 生成图片的名字* @return*/public String createHorizontalBarChart(CategoryDataset dataset,String xName, String yName, String chartTitle, String charName){JFreeChart chart = ChartFactory.createBarChart(chartTitle, // 图表标题xName, // 目录轴的显示标签yName, // 数值轴的显示标签dataset, // 数据集PlotOrientation.VERTICAL, // 图表方向:水平、垂直true, // 是否显示图例(对于简单的柱状图必须是false)false, // 是否生成工具false // 是否生成URL链接);CategoryPlot plot = chart.getCategoryPlot();// 数据轴精度NumberAxis vn = (NumberAxis) plot.getRangeAxis();//设置刻度必须从0开始// vn.setAutoRangeIncludesZero(true);DecimalFormat df = new DecimalFormat("#0.00");vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式CategoryAxis domainAxis = plot.getDomainAxis();domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 横轴上的// LableFont labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);domainAxis.setLabelFont(labelFont);// 轴标题domainAxis.setTickLabelFont(labelFont);// 轴数值domainAxis.setMaximumCategoryLabelWidthRatio(0.8f);// 横轴上的Lable 是否完整显示// domainAxis.setVerticalCategoryLabels(false);plot.setDomainAxis(domainAxis);ValueAxis rangeAxis = plot.getRangeAxis();// 设置最高的一个Item 与图片顶端的距离rangeAxis.setUpperMargin(0.15);// 设置最低的一个Item 与图片底端的距离rangeAxis.setLowerMargin(0.15);plot.setRangeAxis(rangeAxis);BarRenderer renderer = new BarRenderer();// 设置柱子宽度renderer.setMaximumBarWidth(0.03);// 设置柱子高度renderer.setMinimumBarLength(30);renderer.setBaseOutlinePaint(Color.BLACK);// 设置柱的颜色renderer.setSeriesPaint(0, Color.GREEN);renderer.setSeriesPaint(1, new Color(0, 0, 255));// 设置每个地区所包含的平行柱的之间距离renderer.setItemMargin(0.5);// 显示每个柱的数值,并修改该数值的字体属性renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); // 设置柱的数值可见renderer.setBaseItemLabelsVisible(true);plot.setRenderer(renderer);// 设置柱的透明度plot.setForegroundAlpha(0.6f);FileOutputStream fos_jpg = null;try{isChartPathExist(CHART_PATH);String chartName = CHART_PA TH + charName;fos_jpg = new FileOutputStream(chartName);ChartUtilities.writeChartAsPNG(fos_jpg, chart, 500, 500, true, 10);return chartName;}catch (Exception e){e.printStackTrace();return null;}finally{try{fos_jpg.close();}catch (Exception e){e.printStackTrace();}}}/*** 饼状图** @param dataset 数据集* @param chartTitle 图标题* @param charName 生成图的名字* @param pieKeys 分饼的名字集* @return*/public String createValidityComparePimChar(PieDataset dataset,String chartTitle, String charName, String[] pieKeys){JFreeChart chart = ChartFactory.createPieChart3D(chartTitle, // chart// titledataset,// datatrue,// include legendtrue, false);// 使下说明标签字体清晰,去锯齿类似于//chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.V ALUE_TEXT_ANTIALIAS_OFF);的效果chart.setTextAntiAlias(false);// 图片背景色chart.setBackgroundPaint(Color.white);// 设置图标题的字体重新设置titleFont font = new Font("隶书", Font.BOLD, 25);TextTitle title = new TextTitle(chartTitle);title.setFont(font);chart.setTitle(title);PiePlot3D plot = (PiePlot3D) chart.getPlot();// 图片中显示百分比:默认方式// 指定饼图轮廓线的颜色// plot.setBaseSectionOutlinePaint(Color.BLACK);// plot.setBaseSectionPaint(Color.BLACK);// 设置无数据时的信息plot.setNoDataMessage("无对应的数据,请重新查询。

java cellstyle的用法

java cellstyle的用法

java cellstyle的用法在Java中,CellStyle是Apache POI库中的一个类,用于定义和设置Excel单元格的样式。

CellStyle对象可以通过Workbook对象的createCellStyle()方法来创建。

CellStyle对象可以通过以下方法来设置和获取单元格的样式:1. setFont(Font font):设置单元格的字体。

2. setAlignment(HorizontalAlignment alignment):设置单元格的水平对齐方式。

3. setVerticalAlignment(VerticalAlignment alignment):设置单元格的垂直对齐方式。

4. setBorder(BorderStyle border, short color):设置单元格的边框样式和颜色。

5. setFillPattern(FillPatternType pattern):设置单元格的填充模式。

6. setFillForegroundColor(IndexedColors color):设置单元格的填充前景色。

7. setDataFormat(short format):设置单元格的数据格式。

8. setWrapText(boolean wrapText):设置单元格文本是否自动换行。

9. setHidden(boolean hidden):设置单元格是否隐藏。

10. setLocked(boolean locked):设置单元格是否锁定。

拓展:CellStyle不仅可以应用于单个单元格,还可以应用于整个列或行。

可以通过Sheet对象的createRow(int rownum)和getRow(int rownum)方法创建行对象,然后通过Row对象的createCell(int column)和getCell(int column)方法创建和获取单元格对象。

java通过FreeMarker模板生成Excel文件之.ftl模板制作

java通过FreeMarker模板生成Excel文件之.ftl模板制作

java通过FreeMarker模板⽣成Excel⽂件之.ftl模板制作关于怎么通过freemarker模板⽣成excel的⽂章很多,关键点在于怎么制作模板⽂件.ftl⽹上的办法是:(1)把Excel模板的格式调好,另存为xml⽂件(2)新建⼀个.ftl⽂件,把xml⽂件内容copy进去,把变量换成FreeMarker的插值当然可⾏,但是这样制作的.ftl⽂件偏⼤,可读性很低我是这样制作的,直接写HTML标签<table><thead><tr><td>资产端简称</td><td>放款⾦额(元)</td><td>账单⽉份</td><td>UZY服务费(元)</td><td>账单状态</td></tr></thead><tbody><#list dataList as data><tr><td>${(data.assetName)!""}</td><td>${(data.loanAmount?string('0.00'))!""}</td><td>${(data.billMonth)!""}</td><td>${(data.uzyServiceFee?string('0.00'))!""}</td><td>${(data.statusName)!""}</td></tr></#list></tbody></table>简单吧,效果如下后台部分代码:private void exportToXls(String templateName, String fileName, Map<String, Object> dataMap, HttpServletResponse response) {Configuration configuration = new Configuration();configuration.setEncoding(Locale.CHINA, "UTF-8");configuration.setDefaultEncoding("UTF-8");configuration.setClassForTemplateLoading(this.getClass(), "/templates");String downloadFileName;try {downloadFileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");} catch (UnsupportedEncodingException e) {logger.warn("encode error", e);downloadFileName = DateUtil.format(new Date());}response.setContentType("application/ms-excel");response.setCharacterEncoding("UTF-8");response.setHeader("Content-disposition", "attachment; filename=" + downloadFileName + ".xls");try {Template template = configuration.getTemplate(templateName);template.process(dataMap, response.getWriter());} catch (Exception e) {logger.warn("export report error", e);}}。

java报表方案

java报表方案

java报表方案随着信息技术的发展,企业对数据分析和报表呈现的需求也越来越高。

作为一种功能强大的编程语言,Java在企业级数据分析报表方案中扮演着重要的角色。

本文将介绍Java在报表方案中的应用,并探讨几种常用的Java报表工具和框架。

一、Java在报表方案中的应用1. 数据抽取和准备在报表方案中,首先需要进行数据抽取和准备工作。

Java提供了丰富的API和开发工具,可以方便地从各种数据源中提取和处理数据。

例如,可以通过JDBC连接数据库,使用Java的相关库进行数据操作和转换,以满足不同数据源的需求。

2. 报表设计和布局报表的设计和布局是保证报表可读性和美观的重要环节。

Java提供了多种可视化框架,例如Swing、JavaFX等,可以用于构建灵活和美观的报表界面。

开发人员可以根据需求设计各种样式和布局,以满足不同的报表展示要求。

3. 数据分析和计算报表的核心任务是对数据进行分析和计算,以便为企业提供决策支持。

Java提供了丰富的数学计算和统计分析库,例如Apache CommonsMath、Jama等,可以方便地进行各种数据分析和计算操作。

开发人员可以根据具体需求选择合适的库进行数据处理和分析。

4. 报表呈现和导出Java对报表的呈现和导出也提供了丰富的支持。

开发人员可以使用Java的打印API将报表直接打印出来,或者将报表导出成各种格式,例如PDF、Excel、HTML等,以方便用户进行查阅和共享。

二、常用的Java报表工具和框架1. JasperReportsJasperReports是一个功能强大的开源报表工具,它基于Java开发,并提供了丰富的特性和灵活的报表设计能力。

JasperReports支持多种数据源,可以将报表导出成多种格式。

开发人员可以使用JasperReports 的API来生成和呈现报表,还可以通过JasperServer进行报表的分发和管理。

2. BIRTBIRT(Business Intelligence and Reporting Tools)是Eclipse基金会推出的一个开源报表工具,它提供了一个功能完善的报表设计和运行环境。

转:jxl导出excel(合并单元格)

转:jxl导出excel(合并单元格)
博客园 用户登录 代码改变世界 密码登录 短信登录 忘记登录用户名 忘记密码 记住我 登录 第三方登录/注册 没有账户, 立即注册
转 : jxl导 出 excel( 合 并 单 元 格 )
Demo
代码如下:
1 import java.io.*; 2 import jxl.*; 3 import jxl.format.UnderlineStyle; 4 import jxl.write.*; 5 public class CreateXLS { 6 public static void main(String args[]) { 7 try { 8 //打开文件 9 WritableWorkbook book= Workbook.createWorkbook(new File("测试.xls")); 10 //生成名为“第一页”的工作表,参数0表示这是第一页 11 WritableSheet sheetOne=book.createSheet("第一页",0); 12 13 /** 14 * 定义单元格样式 15 */ 16 WritableFont wf_title = new WritableFont(WritableFont.ARIAL, 11, 17 WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, 18 jxl.format.Colour.BLACK); // 定义格式 字体 下划线 斜体 粗体 颜色 19 WritableFont wf_head = new WritableFont(WritableFont.ARIAL, 11, 20 WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, 21 jxl.format.Colour.BLACK); // 定义格式 字体 下划线 斜体 粗体 颜色 22 WritableFont wf_table = new WritableFont(WritableFont.ARIAL, 11, 23 WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, 24 jxl.format.Colour.BLACK); // 定义格式 字体 下划线 斜体 粗体 颜色 25 26 WritableCellFormat wcf_title = new WritableCellFormat(wf_title); // 单元格定义 27 wcf_title.setBackground(jxl.format.Colour.WHITE); // 设置单元格的背景颜色 28 wcf_title.setAlignment(jxl.format.Alignment.CENTRE); // 设置对齐方式 29 wcf_title.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK); //设置边框 30 31 WritableCellFormat wcf_title1 = new WritableCellFormat(wf_title); // 单元格定义 32 wcf_title1.setBackground(jxl.format.Colour.LIGHT_GREEN); // 设置单元格的背景颜色 33 wcf_title1.setAlignment(jxl.format.Alignment.CENTRE); // 设置对齐方式 34 wcf_title1.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK); //设置边框 35 36 WritableCellFormat wcf_title2 = new WritableCellFormat(wf_title); // 单元格定义 37 wcf_title2.setBackground(jxl.format.Colour.YELLOW2); // 设置单元格的背景颜色 38 wcf_title2.setAlignment(jxl.format.Alignment.CENTRE); // 设置对齐方式 39 wcf_title2.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK); //设置边框 40 41 WritableCellFormat wcf_head1 = new WritableCellFormat(wf_head); 42 wcf_head1.setBackground(jxl.format.Colour.LIGHT_GREEN); 43 wcf_head1.setAlignment(jxl.format.Alignment.CENTRE); 44 wcf_head1.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK); 45 46 WritableCellFormat wcf_head2 = new WritableCellFormat(wf_head); 47 wcf_head2.setBackground(jxl.format.Colour.YELLOW2); 48 wcf_head2.setAlignment(jxl.format.Alignment.CENTRE); 49 wcf_head2.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK); 50 51 52 WritableCellFormat wcf_table1 = new WritableCellFormat(wf_table); 53 wcf_table1.setBackground(jxl.format.Colour.LIGHT_GREEN); 54 wcf_table1.setAlignment(jxl.format.Alignment.CENTRE); 55 wcf_table1.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK); 56 57 WritableCellFormat wcf_table2 = new WritableCellFormat(wf_table); 58 wcf_table2.setBackground(jxl.format.Colour.YELLOW2); 59 wcf_table2.setAlignment(jxl.format.Alignment.CENTRE); 60 wcf_table2.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK); 61

Java 在Excel中添加分离型饼图、环形图

Java 在Excel中添加分离型饼图、环形图

Java 在Excel中添加分离型饼图、环形图一、概述Excel中可支持多种不同类型的图表,本文介绍如何绘制分离型饼图和环形图。

其中,分离型饼图的绘制可分为整体分离型(即设置饼图分离程度)和局部分离(即设置点爆炸型值)两种情况。

下面将以Java程序代码介绍如何在Excel中实现以上图形。

二、程序环境●Spire.Xls.jar●Jdk 1.8.0(版本>=1.6.0即可)●IDEA注:Jar使用的是Free Spire.XLS for Java(免费版)中的Spire.Xls.jar。

编辑代码前,导入jar到Java程序,两种方法可导入(任选其一即可):1. 下载jar包,解压导入lib文件夹下的jar到Java程序;2. maven程序中配置pom.xml文件,指定spire的maven路径及依赖,参考如下:<repositories><repository><id>com.e-iceblue</id><url>/repository/maven-public/</url></repository></repositories><dependencies><dependency><groupId>e-iceblue</groupId><artifactId>spire.xls.free</artifactId><version>3.9.1</version></dependency></dependencies>配置完成后,导入jar到程序。

三、Java代码1. 分离型饼图import com.spire.xls.*;import com.spire.xls.charts.ChartSerie;import java.awt.*;public class ExplodedPieChart {public static void main(String[] args) {//创建Workbook对象Workbook workbook = new Workbook();//获取第一个工作表Worksheet sheet = workbook.getWorksheets().get(0);//将图表数据写入工作表sheet.getCellRange("A1").setValue("年份");sheet.getCellRange("A2").setValue("2017");sheet.getCellRange("A3").setValue("2018");sheet.getCellRange("A4").setValue("2019");sheet.getCellRange("A5").setValue("2020");sheet.getCellRange("B1").setValue("销售额");sheet.getCellRange("B2").setNumberValue(4000);sheet.getCellRange("B3").setNumberValue(6000);sheet.getCellRange("B4").setNumberValue(7000);sheet.getCellRange("B5").setNumberValue(8500);//设置单元格样式sheet.getCellRange("A1:B1").setRowHeight(15);sheet.getCellRange("A1:B1").getCellStyle().setColor(Color.darkGray); sheet.getCellRange("A1:B1").getCellStyle().getExcelFont().setColor(Color.white);sheet.getCellRange("A1:B1").getCellStyle().setVerticalAlignment(VerticalAlignType. Center);sheet.getCellRange("A1:B1").getCellStyle().setHorizontalAlignment(HorizontalAlignTy pe.Center);sheet.getCellRange("B2:C5").getCellStyle().setNumberFormat("\"¥\"#,##0");//添加整体分离型饼图Chart piechart = sheet.getCharts().add(ExcelChartType.Pie);//设置图表数据区域piechart.setDataRange(sheet.getCellRange("B2:B5"));piechart.setSeriesDataFromRange(false);//设置图表位置piechart.setLeftColumn(4);piechart.setTopRow(1);piechart.setRightColumn(10);piechart.setBottomRow(20);//设置图表标题piechart.setChartTitle("年销售额");piechart.getChartTitleArea().isBold(true);piechart.getChartTitleArea().setSize(12);//设置系列标签ChartSerie cs = piechart.getSeries().get(0);cs.setCategoryLabels(sheet.getCellRange("A2:A5"));cs.setValues(sheet.getCellRange("B2:B5"));cs.getDataPoints().getDefaultDataPoint().getDataLabels().hasValue(true);piechart.getPlotArea().getFill().setVisible(false);//设置饼图整体分离for (int i = 0; i < piechart.getSeries().getCount(); i++){piechart.getSeries().get(i).getDataFormat().setPercent(20);}//添加局部分离型饼图Chart piechart1 = sheet.getCharts().add(ExcelChartType.Pie);piechart1.setDataRange(sheet.getCellRange("B2:B5"));piechart1.setSeriesDataFromRange(false);piechart1.setLeftColumn(11);piechart1.setTopRow(1);piechart1.setRightColumn(17);piechart1.setBottomRow(20);piechart1.setChartTitle("年销售额");piechart1.getChartTitleArea().isBold(true);piechart1.getChartTitleArea().setSize(12);ChartSerie cs1 = piechart1.getSeries().get(0);cs1.setCategoryLabels(sheet.getCellRange("A2:A5"));cs1.setValues(sheet.getCellRange("B2:B5"));cs1.getDataPoints().getDefaultDataPoint().getDataLabels().hasValue(true); piechart1.getPlotArea().getFill().setVisible(false);//设置饼图局部分离piechart1.getSeries().get(0).getDataPoints().get(1).getDataFormat().setPercent(20);//保存文档workbook.saveToFile("ExplodedPieChart.xlsx", ExcelVersion.Version2016);workbook.dispose();}}2. 分离型环形图import com.spire.xls.*;import com.spire.xls.charts.ChartSerie;import java.awt.*;public class ExplodedDoughnutChart {public static void main(String[] args) {//创建Workbook对象Workbook workbook = new Workbook();//获取第一个工作表Worksheet sheet = workbook.getWorksheets().get(0);//将图表数据写入工作表sheet.getCellRange("A1").setValue("年份");sheet.getCellRange("A2").setValue("2017");sheet.getCellRange("A3").setValue("2018");sheet.getCellRange("A4").setValue("2019");sheet.getCellRange("A5").setValue("2020");sheet.getCellRange("B1").setValue("销售额");sheet.getCellRange("B2").setNumberValue(4000);sheet.getCellRange("B3").setNumberValue(6000);sheet.getCellRange("B4").setNumberValue(7000);sheet.getCellRange("B5").setNumberValue(8500);//设置单元格样式sheet.getCellRange("A1:B1").setRowHeight(15);sheet.getCellRange("A1:B1").getCellStyle().setColor(Color.darkGray);sheet.getCellRange("A1:B1").getCellStyle().getExcelFont().setColor(Color.white);sheet.getCellRange("A1:B1").getCellStyle().setVerticalAlignment(VerticalAlignType. Center);sheet.getCellRange("A1:B1").getCellStyle().setHorizontalAlignment(HorizontalAlignTy pe.Center);sheet.getCellRange("B2:C5").getCellStyle().setNumberFormat("\"¥\"#,##0");//添加环形图Chart chart = sheet.getCharts().add(ExcelChartType.Doughnut);//设置图表数据区域chart.setDataRange(sheet.getCellRange("B2:B5"));chart.setSeriesDataFromRange(false);//设置图表位置chart.setLeftColumn(4);chart.setTopRow(1);chart.setRightColumn(10);chart.setBottomRow(20);//设置图表标题chart.setChartTitle("年销售额");chart.getChartTitleArea().isBold(true);chart.getChartTitleArea().setSize(12);//设置系列标签ChartSerie cs = chart.getSeries().get(0);cs.setCategoryLabels(sheet.getCellRange("A2:A5"));cs.setValues(sheet.getCellRange("B2:B5"));cs.getDataPoints().getDefaultDataPoint().getDataLabels().hasValue(true); chart.getPlotArea().getFill().setVisible(false);//添加分离型环形图Chart chart1 = sheet.getCharts().add(ExcelChartType.DoughnutExploded);chart1.setDataRange(sheet.getCellRange("B2:B5"));chart1.setSeriesDataFromRange(false);chart1.setLeftColumn(11);chart1.setTopRow(1);chart1.setRightColumn(17);chart1.setBottomRow(20);chart1.setChartTitle("年销售额");chart1.getChartTitleArea().isBold(true);chart1.getChartTitleArea().setSize(12);ChartSerie cs1 = chart1.getSeries().get(0);cs1.setCategoryLabels(sheet.getCellRange("A2:A5"));cs1.setValues(sheet.getCellRange("B2:B5"));cs1.getDataPoints().getDefaultDataPoint().getDataLabels().hasValue(true); chart1.getPlotArea().getFill().setVisible(false);//保存文档workbook.saveToFile("ExplodedDoughnutChart.xlsx",FileFormat.Version2013); workbook.dispose();}}。

java xssfsheet 的方法

java xssfsheet 的方法

java xssfsheet 的方法
摘要:
1.简介:Java XSSFSheet的概念和用途
2.创建XSSF工作簿和工作表
3.操作单元格和行
4.读写数据和公式
5.样式和格式化
6.处理合并单元格和公式引用
7.案例实战:使用XSSFSheet实现简单统计报表
8.总结:Java XSSFSheet的优势和局限性
正文:
【简介】
Java XSSFSheet是Apache POI库中的一个重要模块,用于处理Microsoft Excel文件。

XSSF(XML Spreadsheet Format)是Excel 2007及以后版本所使用的文件格式。

在Java中,XSSFSheet提供了便捷的方法来操作Excel工作表,如添加、删除、修改单元格数据等。

接下来,我们将详细介绍如何使用Java XSSFSheet进行各种操作。

【创建XSSF工作簿和工作表】
要使用Java XSSFSheet,首先需要导入相关的依赖。

JFreeChart教程

JFreeChart教程

JFreeChart教程--入门一、JFreeChart获取。

JFreeChart是JFreeChart公司在开源网站上的一个项目,该公司的主要产品有如下:1、JFreeReport:报表解决工具2、JFreeChart:Java图形解决方案(Application/Applet/Servlet/Jsp)3、JCommon:JFreeReport和JFreeChart的公共类库4、JFreeDesigner:JFreeReport的报表设计工具我们可以从jfree官方网站上获取最新版本和相关资料(但是jfree的document需要40美金才能获取),获取地址:/jfreechart/index.html(同时可以获得简明介绍)我们以当前最新版本:jfreechart_0.9.21.zip为例子进行说明。

二、JFreeChart配置安装1、解压jfreechart_0.9.21.zip到指定位置,其中source是jfreechart的源码,jfreechart-0.9.21-demo.jar是例子程序(该部分留给大家自己去研究)2、为了配置成功,我们需要关注的文件有如下三个:jfreechart-0.9.21.jar、lib\jcommon-0.9.6.jar、lib\gnujaxp.jar3、如果是Application开发,把上述三个文件拷贝到%JAVA_HOME%\LIB中,同时在环境变量CLASSPATH中加入如果是WEB开发,以TOMCAT中的一个WEB项目TEST为例子说明:把上述三个文件拷贝到TEST\WEB-INF\LIB中,然后修改TEST\WEB-INF\web.xml 文件,在其中加入如下代码:Java代码至此jfreechart的配置就完成了,下面就可以进行jfreechart的开发了。

这里值得提出的是jfreechart的类结构设计前后兼容性不是很好,不同版本的jfreechart中类库结构可能不一样,有时候可能需要查源码。

Java中使用Jxl导出Excel

Java中使用Jxl导出Excel

很多人都说是客户端造成的,没有办法控制,而且后台会记录这个异常,日志也会疯狂爆满,时间长了,肯定会DOWN掉的.
本人觉得大多数可能是第二条问题的原因引起的,即大多数浏览器阻止了窗口的弹出,相当于客户关掉了浏览器,可等效于浏览器端按了Stop ,而这时服务器端还在给客户端发送数据,所以产生了上异常,经过本人的测试,发现只需将网站地址(或本机地址)加入"受信任的站点"即可解决问题,因为这样设置了以后,浏览器就不会阻止窗口的弹出了,这样浏览器就会等到服务器端发送完数据后再进行下面的动作.因而异常就不会发生了.
大概设置方式如下:"工具->internet(选项..)->安全->受信任的站点->站点",将地址加入即可.
} catch (Exceptio来自 e) { e.printStackTrace();
}
}
1.今天做Web Excel导出,报ClientAbortException: socke不用管他,反正不影响导出,有人建议修改TOMCAT源代码,其实这个问题的确不好想。很巧合的是我另一个项目用JMESA做的导出却不会出现这种异常,感觉有的奇怪,源代码源样COPY过来,一样报错。一不小心发现,JMESA是用<a href="javascript:export">提交导出请求,而我用的是<img onclick="export">方法,难道有不同?try.结果果然如此,全部改成<a href="javascript:export">方式,问题解决。
public void ExcelDemo(String filePath, List<AdminBeans> ve) {

java利用JFreeChart实现各种数据统计图(柱形图_饼图_折线图)

java利用JFreeChart实现各种数据统计图(柱形图_饼图_折线图)

各类统计程序实现杨方 531115121 矢量图的生成矢量统计图,即是以矢量图形格式生成、存在和输出的统计图。

这种统计图图形要素丰富、交互编辑简单、存储格式多样,打印输出方便,是GIS应用系统最优先选择的统计图。

最常用的三类矢量统计图是直方图、曲线图、饼图。

矢量统计图的生成,首先要将数据组织为一定的格式,然后进行图形参数的计算和设置,再生成图形,最后进行浏览显示或者保存输出。

当然,如果对生成的图形不满意,可以进行参数修改,然后重新生成,最后再显示或保存。

1.1 数据组织原始数据可以整理为二维表格的形式,通过文件(*.txt,*.xls,*.doc)导入,也可以将数据整理为二维数组的形式输入。

统计图只支持为数值型的数据,包括整型、长整型、浮点型和双精度型等4种数据类型。

1.2 设置参数图形参数可以由用户外部输入,也可以根据数据生成默认参数,分为基本参数、坐标参数、图例参数和数据参数等。

(1)基本参数包括图形类型,图形名称,图形范围,点、线、区参数等。

(2)坐标轴参数包括是否绘制轴线、刻度线、标注、网格线的标志,刻度数,颜色,名称,比例尺,以及是否绘制包围盒或箭头的标志。

(3)图例参数包括是否绘制图例的标志和图例显示位置标志。

(4)数据参数包括数据类型,是否绘制数据表的标志,图形单元的宽度或间隔、图形单元的颜色,系列和类别显示标志等。

1.3 图形生成生成图形的基本步骤如下:(1)确认存在点、线、面工作区。

生成的图形要暂时存入工作区中,然后才能进行显示或保存。

点线面工作区可以由外部输入,也可以在软件中生成。

(2)确认各项图形参数有效。

必须保证每项图形参数都有效,否则软件将出错。

对于没有设置有效值的参数,要重新设置默认参数。

(3)依次生成图形的各个要素:生成坐标轴、生成图形主体、生成数据表、生成图例和生成图形。

在生成统计图的过程中,要随时计算图形的当前范围,以控制后续元素的位置。

1.4 图形显示统计图生成后,保存在MAPGIS的点线面工作区中,可以调用MAPGIS的图形显示视图进行显示。

JFreeChart详细使用教程

JFreeChart详细使用教程

JFreeChart教程--入门一、JFreeChart获取。

JFreeChart是JFreeChart公司在开源网站上的一个项目,该公司的主要产品有如下:1、JFreeReport:报表解决工具2、JFreeChart:Java图形解决方案(Application/Applet/Servlet/Jsp)3、JCommon:JFreeReport和JFreeChart的公共类库4、JFreeDesigner:JFreeReport的报表设计工具我们可以从jfree官方网站上获取最新版本和相关资料(但是jfree的document需要40美金才能获取),获取地址:/jfreechart/index.html(同时可以获得简明介绍)我们以当前最新版本:jfreechart_0.9.21.zip为例子进行说明。

二、JFreeChart配置安装1、解压jfreechart_0.9.21.zip到指定位置,其中source是jfreechart的源码,jfreechart-0.9.21-demo.jar是例子程序(该部分留给大家自己去研究)2、为了配置成功,我们需要关注的文件有如下三个:jfreechart-0.9.21.jar、lib\jcommon-0.9.6.jar、lib\gnujaxp.jar3、如果是Application开发,把上述三个文件拷贝到%JAVA_HOME%\LIB中,同时在环境变量CLASSPATH中加入如果是WEB开发,以TOMCAT中的一个WEB项目TEST为例子说明:把上述三个文件拷贝到TEST\WEB-INF\LIB中,然后修改TEST\WEB-INF\web.xml 文件,在其中加入如下代码:Java代码至此jfreechart的配置就完成了,下面就可以进行jfreechart的开发了。

这里值得提出的是jfreechart的类结构设计前后兼容性不是很好,不同版本的jfreechart中类库结构可能不一样,有时候可能需要查源码。

java生成excel(多级表头)导出

java生成excel(多级表头)导出

java⽣成excel(多级表头)导出依赖⼯具包<dependencies><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.5</version></dependency></dependencies>该⼯具包是对 Apache POI包的分装private void export(HttpServletResponse response, String fileName, List<?> projects, List<SummarizeDownloadColumns> columns) throws IOException { ExcelWriter bigWriter = ExcelUtil.getBigWriter();//创建⼀⾏空表头占个位置bigWriter.writeHeadRow(new LinkedList());//创建需要展⽰的的⼆级表头,{filedName,中⽂名}int lastCol = 0;for (int i = 0; i < columns.size(); i++) {if (columns.get(i).getChildren() != null) {for (int j = 0; j < columns.get(i).getChildren().size(); j++) {bigWriter.addHeaderAlias(columns.get(i).getChildren().get(j).getProp(), columns.get(i).getChildren().get(j).getLabel() + columns.get(i).getProp()); bigWriter.setColumnWidth(lastCol++, 30);}}}//根据需要合并添加第⼀列表头bigWriter.merge(0, 1, 0, 0, columns.get(0).getLabel(), true);bigWriter.merge(0, 0, 1, 14, "第⼀类(个⼈)", true);bigWriter.merge(0, 0, 15, 28, "第⼀类(企业)", true);bigWriter.merge(0, 0, 29, 42, "第⼆类(个⼈)", true);bigWriter.merge(0, 0, 43, 56, "第⼆类(企业)", true);bigWriter.merge(0, 0, 57, 64, "总计项", true);// 只导出配置好的列名bigWriter.setOnlyAlias(true);bigWriter.write(projects, true);StyleSet styleSet = bigWriter.getStyleSet();styleSet.setWrapText();response.setContentType("application/vnd.ms-excel;charset=utf-8");response.setHeader("filename", URLEncoder.encode(fileName + ".xlsx", "UTF-8"));ServletOutputStream out = response.getOutputStream();bigWriter.flush(out, true);bigWriter.close();IoUtil.close(out);}导出效果动态⽣成模板(只需要表头)String fileName = "sdjhds";try {ExcelWriter bigWriter = ExcelUtil.getBigWriter();List list = new ArrayList();list.add("表头1");list.add("表头2");bigWriter.writeHeadRow(list);response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8") + ".xls");response.setHeader("filename", URLEncoder.encode(fileName, "utf-8") + ".xls");response.setHeader("Pragma", "no-cache");response.setHeader("Content-type", "application/octet-stream;charset=UTF-8");ServletOutputStream out = response.getOutputStream();bigWriter.flush(out, true);bigWriter.close();IoUtil.close(out);} catch (IOException e) {e.printStackTrace();}。

java 实现excel linest方法

java 实现excel linest方法

java 实现excel linest方法### Java实现Excel Linest方法在Java中,实现Excel文件的线性回归分析(Linest)通常需要借助一些外部库,如Apache POI和JFreeChart等,因为Java原生API并不直接支持此类高级统计分析。

以下是如何使用这些库在Java中实现类似Excel Linest功能的方法。

#### 导语线性回归是统计中的一种方法,用于评估两个或多个变量之间的关系。

在Excel中,`Linest`函数可以用来进行线性拟合,估算趋势线。

在Java中,我们可以通过以下步骤模拟这一过程。

#### 1.准备数据首先,需要准备或读取包含数据的Excel文件。

这里假设你已经有了两个数组,一个包含x轴数据,另一个包含y轴数据。

```javadouble[] xData = { /* x坐标数据*/ };double[] yData = { /* y坐标数据*/ };```#### 2.添加依赖在项目中,需要添加Apache POI和JFreeChart的依赖,以处理Excel文件和进行统计分析。

#### 3.实现线性回归使用JFreeChart库中的`SimpleRegression`类来执行线性回归分析。

```javaimport org.jfree.data.statistics.SimpleRegression;// 创建SimpleRegression对象SimpleRegression regression = new SimpleRegression();// 添加数据点for (int i = 0; i < xData.length; i++) {regression.addData(xData[i], yData[i]);}// 获取回归系数double intercept = regression.getIntercept();double slope = regression.getSlope();// 打印结果System.out.println("截距: " + intercept);System.out.println("斜率: " + slope);// 根据回归方程计算预测值double predictedY = intercept + slope * xValue;```#### 4.读取Excel文件如果你需要从Excel文件中读取数据,可以使用Apache POI。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

需要导包:jfreechart-1.0.8a.jar和jcommon-1.0.12.jar建一个java类CreateChartServiceImpl 类定义如下单独运行此类在e:\test下看图片效果剩下的自己改吧package Excel.tools;import java.awt.Color;import java.awt.Font;import java.io.File;import java.io.FileOutputStream;import java.text.DecimalFormat;import java.text.NumberFormat;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.CategoryAxis;import org.jfree.chart.axis.CategoryLabelPositions;import org.jfree.chart.axis.NumberAxis;import org.jfree.chart.axis.V alueAxis;import bels.StandardCategoryItemLabelGenerator; import bels.StandardPieSectionLabelGenerator; import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.PiePlot3D;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.renderer.category.BarRenderer;import org.jfree.chart.renderer.category.LineAndShapeRenderer; import org.jfree.chart.renderer.category.StackedBarRenderer; import org.jfree.chart.title.TextTitle;import org.jfree.data.category.CategoryDataset;import org.jfree.data.general.DatasetUtilities;import org.jfree.data.general.DefaultPieDataset;import org.jfree.data.general.PieDataset;/*** 实际取色的时候一定要16位的,这样比较准确** @author new*/public class CreateChartServiceImpl {private static final String CHART_PATH = "E:/test/";public static void main(String[] args) {// TODO Auto-generated method stubCreateChartServiceImpl pm = new CreateChartServiceImpl();// 生成饼状图pm.makePieChart();// 生成单组柱状图pm.makeBarChart();// 生成多组柱状图pm.makeBarGroupChart();// 生成堆积柱状图pm.makeStackedBarChart();// 生成折线图pm.makeLineAndShapeChart();}/*** 生成折线图*/public void makeLineAndShapeChart() {double[][] data = new double[][] { { 672, 766, 223, 540, 126 },{ 325, 521, 210, 340, 106 }, { 332, 256, 523, 240, 526 } };String[] rowKeys = { "苹果", "梨子", "葡萄" };String[] columnKeys = { "北京", "上海", "广州", "成都", "深圳" };CategoryDataset dataset = getBarData(data, rowKeys, columnKeys);createTimeXYChar("折线图", "x轴", "y轴", dataset, "lineAndShap.jpg"); }/*** 生成分组的柱状图*/public void makeBarGroupChart() {double[][] data = new double[][] { { 672, 766, 223, 540, 126 },{ 325, 521, 210, 340, 106 }, { 332, 256, 523, 240, 526 } };String[] rowKeys = { "苹果", "梨子", "葡萄" };String[] columnKeys = { "北京", "上海", "广州", "成都", "深圳" };CategoryDataset dataset = getBarData(data, rowKeys, columnKeys);createBarChart(dataset, "x坐标", "y坐标", "柱状图", "barGroup.png"); }/*** 生成柱状图*/public void makeBarChart() {double[][] data = new double[][] { { 672, 766, 223, 540, 126 } };String[] rowKeys = { "苹果" };String[] columnKeys = { "北京", "上海", "广州", "成都", "深圳" };CategoryDataset dataset = getBarData(data, rowKeys, columnKeys);createBarChart(dataset, "x坐标", "y坐标", "柱状图", "bar.png");}/*** 生成堆栈柱状图*/public void makeStackedBarChart() {double[][] data = new double[][] { { 0.21, 0.66, 0.23, 0.40, 0.26 },{ 0.25, 0.21, 0.10, 0.40, 0.16 } };String[] rowKeys = { "苹果", "梨子" };String[] columnKeys = { "北京", "上海", "广州", "成都", "深圳" };CategoryDataset dataset = getBarData(data, rowKeys, columnKeys);createStackedBarChart(dataset, "x坐标", "y坐标", "柱状图", "stsckedBar.png"); }/*** 生成饼状图*/public void makePieChart() {double[] data = { 9, 91 };String[] keys = { "失败率", "成功率" };createValidityComparePimChar(getDataPieSetByUtil(data, keys), "饼状图", "pie2.png", keys);}// 柱状图,折线图数据集public CategoryDataset getBarData(double[][] data, String[] rowKeys,String[] columnKeys) {return DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);}// 饼状图数据集public PieDataset getDataPieSetByUtil(double[] data,String[] datadescription) {if (data != null && datadescription != null) {if (data.length == datadescription.length) {DefaultPieDataset dataset = new DefaultPieDataset();for (int i = 0; i < data.length; i++) {dataset.setValue(datadescription[i], data[i]);}return dataset;}}return null;}/*** 柱状图**@param dataset* 数据集* @param xName* x轴的说明(如种类,时间等)* @param yName* y轴的说明(如速度,时间等)* @param chartTitle* 图标题* @param charName* 生成图片的名字* @return*/public String createBarChart(CategoryDataset dataset, String xName,String yName, String chartTitle, String charName) {JFreeChart chart = ChartFactory.createBarChart(chartTitle, // 图表标题xName, // 目录轴的显示标签yName, // 数值轴的显示标签dataset, // 数据集PlotOrientation.VERTICAL, // 图表方向:水平、垂直true, // 是否显示图例(对于简单的柱状图必须是false)false, // 是否生成工具false // 是否生成URL链接);Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);/** VALUE_TEXT_ANTIALIAS_OFF表示将文字的抗锯齿关闭,* 使用的关闭抗锯齿后,字体尽量选择12到14号的宋体字,这样文字最清晰好看*///chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);chart.setTextAntiAlias(false);chart.setBackgroundPaint(Color.white);// create plotCategoryPlot plot = chart.getCategoryPlot();// 设置横虚线可见plot.setRangeGridlinesVisible(true);// 虚线色彩plot.setRangeGridlinePaint(Color.gray);// 数据轴精度NumberAxis vn = (NumberAxis) plot.getRangeAxis();// vn.setAutoRangeIncludesZero(true);DecimalFormat df = new DecimalFormat("#0.00");vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式// x轴设置CategoryAxis domainAxis = plot.getDomainAxis();domainAxis.setLabelFont(labelFont);// 轴标题domainAxis.setTickLabelFont(labelFont);// 轴数值// Lable(Math.PI/3.0)度倾斜// domainAxis.setCategoryLabelPositions(CategoryLabelPositions// .createUpRotationLabelPositions(Math.PI / 3.0));domainAxis.setMaximumCategoryLabelWidthRatio(0.6f);// 横轴上的Lable 是否完整显示// 设置距离图片左端距离domainAxis.setLowerMargin(0.1);// 设置距离图片右端距离domainAxis.setUpperMargin(0.1);// 设置columnKey 是否间隔显示// domainAxis.setSkipCategoryLabelsToFit(true);plot.setDomainAxis(domainAxis);// 设置柱图背景色(注意,系统取色的时候要使用16位的模式来查看颜色编码,这样比较准确)plot.setBackgroundPaint(new Color(255, 255, 204));// y轴设置ValueAxis rangeAxis = plot.getRangeAxis();rangeAxis.setLabelFont(labelFont);rangeAxis.setTickLabelFont(labelFont);// 设置最高的一个Item 与图片顶端的距离rangeAxis.setUpperMargin(0.15);// 设置最低的一个Item 与图片底端的距离rangeAxis.setLowerMargin(0.15);plot.setRangeAxis(rangeAxis);BarRenderer renderer = new BarRenderer();// 设置柱子宽度renderer.setMaximumBarWidth(0.05);// 设置柱子高度renderer.setMinimumBarLength(0.2);// 设置柱子边框颜色renderer.setBaseOutlinePaint(Color.BLACK);// 设置柱子边框可见renderer.setDrawBarOutline(true);// // 设置柱的颜色renderer.setSeriesPaint(0, new Color(204, 255, 255));renderer.setSeriesPaint(1, new Color(153, 204, 255));renderer.setSeriesPaint(2, new Color(51, 204, 204));// 设置每个地区所包含的平行柱的之间距离renderer.setItemMargin(0.0);// 显示每个柱的数值,并修改该数值的字体属性renderer.setIncludeBaseInRange(true);renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); renderer.setBaseItemLabelsVisible(true);plot.setRenderer(renderer);// 设置柱的透明度plot.setForegroundAlpha(1.0f);FileOutputStream fos_jpg = null;try {isChartPathExist(CHART_PATH);String chartName = CHART_PA TH + charName;fos_jpg = new FileOutputStream(chartName);ChartUtilities.writeChartAsPNG(fos_jpg, chart, 500, 500, true, 10);return chartName;} catch (Exception e) {e.printStackTrace();return null;} finally {try {fos_jpg.close();} catch (Exception e) {e.printStackTrace();}}}/*** 横向图** @param dataset* 数据集* @param xName* x轴的说明(如种类,时间等)* @param yName* y轴的说明(如速度,时间等)* @param chartTitle* 图标题* @param charName* 生成图片的名字* @return*/public String createHorizontalBarChart(CategoryDataset dataset,String xName, String yName, String chartTitle, String charName) { JFreeChart chart = ChartFactory.createBarChart(chartTitle, // 图表标题xName, // 目录轴的显示标签yName, // 数值轴的显示标签dataset, // 数据集PlotOrientation.VERTICAL, // 图表方向:水平、垂直true, // 是否显示图例(对于简单的柱状图必须是false)false, // 是否生成工具false // 是否生成URL链接);CategoryPlot plot = chart.getCategoryPlot();// 数据轴精度NumberAxis vn = (NumberAxis) plot.getRangeAxis();// 设置刻度必须从0开始// vn.setAutoRangeIncludesZero(true);DecimalFormat df = new DecimalFormat("#0.00");vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式CategoryAxis domainAxis = plot.getDomainAxis();domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 横轴上的// LableFont labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);domainAxis.setLabelFont(labelFont);// 轴标题domainAxis.setTickLabelFont(labelFont);// 轴数值domainAxis.setMaximumCategoryLabelWidthRatio(0.8f);// 横轴上的Lable 是否完整显示// domainAxis.setVerticalCategoryLabels(false);plot.setDomainAxis(domainAxis);ValueAxis rangeAxis = plot.getRangeAxis();// 设置最高的一个Item 与图片顶端的距离rangeAxis.setUpperMargin(0.15);// 设置最低的一个Item 与图片底端的距离rangeAxis.setLowerMargin(0.15);plot.setRangeAxis(rangeAxis);BarRenderer renderer = new BarRenderer();// 设置柱子宽度renderer.setMaximumBarWidth(0.03);// 设置柱子高度renderer.setMinimumBarLength(30);renderer.setBaseOutlinePaint(Color.BLACK);// 设置柱的颜色renderer.setSeriesPaint(0, Color.GREEN);renderer.setSeriesPaint(1, new Color(0, 0, 255));// 设置每个地区所包含的平行柱的之间距离renderer.setItemMargin(0.5);// 显示每个柱的数值,并修改该数值的字体属性renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());// 设置柱的数值可见renderer.setBaseItemLabelsVisible(true);plot.setRenderer(renderer);// 设置柱的透明度plot.setForegroundAlpha(0.6f);FileOutputStream fos_jpg = null;try {isChartPathExist(CHART_PATH);String chartName = CHART_PA TH + charName;fos_jpg = new FileOutputStream(chartName);ChartUtilities.writeChartAsPNG(fos_jpg, chart, 500, 500, true, 10);return chartName;} catch (Exception e) {e.printStackTrace();return null;} finally {try {fos_jpg.close();} catch (Exception e) {e.printStackTrace();}}}/*** 饼状图** @param dataset* 数据集* @param chartTitle* 图标题* @param charName* 生成图的名字* @param pieKeys* 分饼的名字集* @return*/public String createValidityComparePimChar(PieDataset dataset,String chartTitle, String charName, String[] pieKeys) {JFreeChart chart = ChartFactory.createPieChart3D(chartTitle, // chart// titledataset,// datatrue,// include legendtrue, false);// 使下说明标签字体清晰,去锯齿类似于//chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.V ALUE_TEXT_ANTIALIAS_OFF);的效果chart.setTextAntiAlias(false);// 图片背景色chart.setBackgroundPaint(Color.white);// 设置图标题的字体重新设置titleFont font = new Font("隶书", Font.BOLD, 25);TextTitle title = new TextTitle(chartTitle);title.setFont(font);chart.setTitle(title);PiePlot3D plot = (PiePlot3D) chart.getPlot();// 图片中显示百分比:默认方式// 指定饼图轮廓线的颜色// plot.setBaseSectionOutlinePaint(Color.BLACK);// plot.setBaseSectionPaint(Color.BLACK);// 设置无数据时的信息plot.setNoDataMessage("无对应的数据,请重新查询。

相关文档
最新文档