java如何读取excel中报表(柱状图)的信息

如题所述

public class Report {
/**作用:报表样式的枚举,该类的getvalue方法返回对应值。<br>
* Columns_2DVer:2D柱状垂直报表。<br>
* Columns_3DVer:3D柱状垂直报表。<br>
* Columns_2DHor:2D柱状水平报表。<br>
* Columns_3DHor:3D柱状水平报表。
* */
public enum ReportType{
Columns_2DVer("Z2DV"),
Columns_3DVer("Z3DV"),
Columns_2DHor("Z2DH"),
Columns_3DHor("Z3DH"),
LineReport_2D("Line2D"),
LineReport_3D("Line3D"),
PieReport_2D("Pie2D"),
PieReport_3D("Pie3D");
private ReportType(String a){
this.str=a;
}
private String str;
public String getvalue(){
return this.str;
}
}
/**作用:作为创建报表时的参数。<br>
* 成员1:报表的标题。<br>
* 成员2:报表的横坐标标题。<br>
* 成员3:报表的纵坐标标题。<br>
* 成员4:JSP页面的request对象。<br>
* 成员5:报表所保存的文件名。<br>
* 成员6:报表的长度。<br>
* 成员7:报表的宽度。<br>
* 成员8:报表的背景颜色,默认为白色。<br>
* 成员9:报表网格中竖线的颜色,默认为黑色。<br>
* 成员10:报表网格中横线的颜色,默认为黑色。<br>
* 成员11:报表横轴内容的数组。<br>
* 成员12:报表纵轴内容的list数组。<br>
* 成员13:提示信息。如果写入多个提示信息,报表就变成多柱状。<br>
* 成员14:报表的模式。详见reportType枚举类<br>
* 成员15:饼状图专用的数值数组。数组的和必须等于1.<br>
* 注意1:要在JSP页面引入该类型才能使用,横纵轴数组的长度必须一致。<br>
* 注意2:如果在提示信息数组中写入了多个提示信息,那么报表纵轴内容的
* list中就必须存放入和它数量一致的int数组。否则会出错。
* */
public class ReportClass{
public String ReportTitle;
public String xTitle;
public String yTitle;
public HttpServletRequest request;
public String filename;
public int width;
public int height;
public Color BackgroundColor=Color.WHITE;
public Color ylineColor=Color.BLACK;
public Color xlineColor=Color.BLACK;
public String[] xValues;
public ArrayList<int[]> yValue=new ArrayList<int[]>();
public String[] helpstr;
public String reportType;
public double[] PieValue;
}
/**作用:创建一个指定类型和数据的图表。<br>
* 参数1:ReportClass类型,各成员具体作用参见ReportClass说明<br>
* 返回值:String类型,在JSP页面可以直接out.println显示图形。<br>
* 注意1:ReportClass类型中,必须设置的成员主要有:<br>
* 1、ReportTitle 2、request 3、filename 4、width 5、height 6、reportType<br>
* 注意2:如果要生成饼状图,还需要设置:<br>
* 1、xValues 2、PieValue 这两个数组的长度必须一致<br>
* 注意3:如果要生成柱状图或折线图,还需要设置:<br>
* 1、xValues 2、yValue 3、helpstr<br>
* yvalue数组总和必须等于1.即100%.<br>
* 如果要生成多柱状或折线图,则需要设置helpstr长度。<br>
* yvalue列表的长度必须和helpstr数组长度一致。<br>
* yvalue中的成员数组的长度必须和xvalue数组长度一致。
* */
public String CreateReport(ReportClass rc){
String s="sf";
String str="";
JFreeChart jc=null;
Font titlefont=new Font("宋体",Font.BOLD,20);
Font tickfont=new Font("宋体",0,15);
Font labelfont=new Font("宋体",Font.BOLD,15);
DefaultCategoryDataset ds=null;
DefaultPieDataset pds=null;
if (rc.ReportTitle!=null){
if (rc.reportType.indexOf("Pie")!=-1){//饼状图
pds=new DefaultPieDataset();
double[] ob=rc.PieValue;
for (int i=0;i<ob.length;i++){
pds.setValue(rc.xValues[i], ob[i]);
}
if (rc.ReportTitle!=null){
if (rc.reportType.equals("Pie2D")){
jc=ChartFactory.createPieChart(rc.ReportTitle,pds,true, true, false);
}
else if (rc.reportType.equals("Pie3D")){
jc=ChartFactory.createPieChart3D(rc.ReportTitle,pds,true, true, false);
}
jc.getTitle().setFont(titlefont);
jc.getLegend().setItemFont(labelfont);
jc.setBackgroundPaint(rc.BackgroundColor);//总背景色
jc.setBorderPaint(rc.BackgroundColor);
PiePlot plot=(PiePlot)jc.getPlot();
plot.setBackgroundPaint(rc.BackgroundColor);
plot.setLabelFont(new Font("宋体",0,15));
}
}
else { //柱状或折线图
ds=new DefaultCategoryDataset();
for (int i=0;i<rc.helpstr.length;i++){
int[] ob=rc.yValue.get(i);
for (int j=0;j<ob.length;j++){
ds.addValue(ob[j], rc.helpstr[i], rc.xValues[j]);
}
}
if (rc.reportType.indexOf("Z2D")!=-1){
PlotOrientation po=null;
if (rc.reportType.indexOf("V")!=-1){
po=PlotOrientation.VERTICAL;
}
else if (rc.reportType.indexOf("H")!=-1){
po=PlotOrientation.HORIZONTAL;
}
jc=ChartFactory.createBarChart(rc.ReportTitle, rc.xTitle, rc.yTitle,
ds, po, true, true, false);
}
else if (rc.reportType.indexOf("Z3D")!=-1){
PlotOrientation po=null;
if (rc.reportType.indexOf("V")!=-1){
po=PlotOrientation.VERTICAL;
}
else if (rc.reportType.indexOf("H")!=-1){
po=PlotOrientation.HORIZONTAL;
}
jc=ChartFactory.createBarChart3D(rc.ReportTitle, rc.xTitle, rc.yTitle,
ds, po, true, true, false);
}
else if (rc.reportType.equals("Line2D")){
PlotOrientation po=PlotOrientation.VERTICAL;
jc=ChartFactory.createLineChart(rc.ReportTitle, rc.xTitle, rc.yTitle,
ds, po, true, true, false);
}
else if (rc.reportType.equals("Line3D")){
PlotOrientation po=PlotOrientation.VERTICAL;
jc=ChartFactory.createLineChart3D(rc.ReportTitle, rc.xTitle, rc.yTitle,
ds, po, true, true, false);
}
jc.getTitle().setFont(titlefont);
jc.getLegend().setItemFont(labelfont);
jc.setBackgroundPaint(rc.BackgroundColor);//总背景色
CategoryPlot cp=jc.getCategoryPlot();
cp.setBackgroundPaint(rc.BackgroundColor);//图形框架背景色
cp.setDomainGridlinePaint(rc.ylineColor);//图形背景网格中竖线的颜色
cp.setDomainGridlinesVisible(true);
cp.setRangeGridlinePaint(rc.xlineColor);//图形背景网格中横线的颜色
cp.getDomainAxis().setTickLabelFont(tickfont);
cp.getDomainAxis().setLabelFont(labelfont);
cp.getRangeAxis().setTickLabelFont(tickfont);
cp.getRangeAxis().setLabelFont(labelfont);
}
try {
File ff=new File(rc.request.getRealPath("/")+"file");
if (!ff.exists()){
ff.mkdir();
}
File file=new File(rc.request.getRealPath("/")+"file/"+rc.filename);
if (!file.exists()){
file.createNewFile();
}
ChartUtilities.saveChartAsJPEG(file, jc, rc.width, rc.height);
str="<img src='"+file.getPath()+"'>";
return str;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
else {
return null;
}
}

}

以前写的一个报表的集成,可以生成任何形式的报表,要引入JFreeChar.你可以慢慢研究下...
温馨提示:内容为网友见解,仅供参考
无其他回答

java如何读取excel中报表(柱状图)的信息
成员11:报表横轴内容的数组。 成员12:报表纵轴内容的list数组。 成员13:提示信息。如果写入多个提示信息,报表就变成多柱状。 成员14:报表的模式。详见reportType枚举类 成员15:饼状图专用的数值数组。数组的和必须等于1. 注意1:要在JSP页面引入该类型才能使用,横纵轴数组的长度必须一致。 注意2:...

java操作word中的excel(对应的是图表,如柱状图)
我是先循环的word中的shape foreach (Microsoft.Office.Interop.Word.Shape shape in docFile.Shapes){ if(shape.Name=="Chart_图表"){ shape.Chart.ChartData.Activate();Microsoft.Office.Interop.Excel.Workbook wb = (Microsoft.Office.Interop.Excel.Workbook)shape.Chart.ChartData.Workbook;Microsof...

poi 4.1.2 如何解析 excel 中的图表?求大佬解惑
public class ExcelChartParser { public static void main(String[] args) { try { FileInputStream fileInputStream = new FileInputStream(new File("your-file.xlsx"));XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream);XSSFSheet sheet = workbook.getSheetAt(0); \/\/ 获取第一个工作...

关于JfreeChart柱状图,数值显示的问题
点“柱状图里的柱子”——右键——资料系列格式——资料标志——值(勾选)——确定 java中使用jfreechart做柱状图,在jsp中显示有问题, jfreechart中显示柱状图到jsp页面: package .test.jfreechart; import java.awt.Font; import javax.swing.JPanel; import .jfree.chart.ChartFactory; imp...

java怎么生成excel柱状图
是要生成excel还是柱状图,如果是单纯的生成柱状图,建议使用插件,推荐highcharts,类似这种的。如果要生成柱状图并且还要导出到excel,用POI或者利用Jacob技术。POI里边应该有相关的类,参考这篇http:\/\/blog.csdn.net\/siyemuzi\/article\/details\/23839547 ...

excel中柱状图如何显示数据?
1.以下面这个已经做好的柱状图为例。2.其实在图做好后,会看到上面有一个图标工具——设计,里面有几种方案,其中就包括显示数据的设计。3.选择其中一种看到柱状图有所变化,已经按其设计加上了数据。4.换一种试试,也是如此。5.还有一种最简单的方法,就是用鼠标在柱状图上右键单击,出现菜单,...

如何让java利用POI导出excel表,并在Excel表中根据表格的数据生成柱形...
柱状图生成区域可以设置的大些

有一个柱状图,如何用EXCEL读柱状图片对应的数值
选中你要添加数据的柱子,单击鼠标右键,选择“添加数据标签”即可!

如何将excel柱状图中的数据放在一根柱状图里面?
在“图表元素”中,添加“数据标签”,即可使excel柱状图标既显示数量也显示占比。以excel2016为例:准备excel表格,在c列写入公式=b9\/sum($b$9:$b$23)。全选A9:C23。点选插入选项卡。先把数值和百分比都做成柱形图,然后在图上选中百分比的系列,右键选择“更改系列图表类型”,这时百分比系列由...

Excel中如何在柱状图显示数据?
1.选中数据,插入普通的柱状图。2.在柱状图上点击右键,选择“数据”。3.点击“切换行列”即可切换横纵坐标。4.选中柱形图的图形。excel如何在柱状图上面显示数字 1.选中数据,插入普通的柱状图。2.在柱状图上点击右键,选择“数据”。3.点击“切换行列”即可切换横纵坐标。4.选中柱形图的图形。

相似回答