「报表生成java」报表生成后如何进行分析

博主:adminadmin 2022-12-14 14:24:08 73

本篇文章给大家谈谈报表生成java,以及报表生成后如何进行分析对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

JAVA怎样动态生成报表

1.采用报表解析包:word,pdf可以用itext,dbf可以用javadbf,excel可以用jxl。这是我的经验。

2.时间你得自己写。

java 如何实现生成报表功能

java生成报表功能,需要自己手动去写,你可以使用第三方的api,集成到你的程序中,这样可以快速实现报表功能。

盈帆报表可以为你提供你需要的api,帮助你实现报表功能,制作出各种复杂报表。更多信息你可以访问:efreport.com

利用java怎么实现生成报表(Excel文件)

这是从Tabel导出数据到Excel的一个例子:jxl.jar包你可以去网上找,有很多资源,如果没找到,也可以留个邮箱,我发给你

import java.io.File;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Date;

import javax.swing.JOptionPane;

import javax.swing.JTable;

import jxl.Workbook;

import jxl.format.Alignment;

import jxl.format.Colour;

import jxl.format.UnderlineStyle;

import jxl.format.VerticalAlignment;

import jxl.read.biff.BiffException;

import jxl.write.Label;

import jxl.write.WritableCellFormat;

import jxl.write.WritableFont;

import jxl.write.WritableSheet;

import jxl.write.WritableWorkbook;

import jxl.write.WriteException;

public class TableToExcel {

public static void export(File file,String heading,String note,JTable table) {

WritableWorkbook workbook = null;// 创建工作薄

try {

if(file.exists()) {//如果文件存在

workbook = Workbook.createWorkbook(file, Workbook.getWorkbook(file));

} else {//如果文件不存在

workbook = Workbook.createWorkbook(file);

}

// 创建工作表

WritableSheet sheet = workbook.createSheet(heading, workbook.getNumberOfSheets());

//获取jtable 的行数和列数

int rowNum = table.getRowCount();

int colNum = table.getColumnCount();

fillHeader(sheet,heading,colNum);//填写主标题

fillColName(sheet,table,colNum);//填写列名

fillCell(sheet,table,colNum,rowNum);// 填写数据

fillNote(sheet,note,colNum,rowNum);//填写签名档

workbook.write();//写入数据

workbook.close();//关闭

} catch (IOException e) {

JOptionPane.showMessageDialog(null, "导入数据前请关闭工作表");

} catch (BiffException e) {

e.printStackTrace();

} catch (WriteException e) {

e.printStackTrace();

}

}

/**

* 填写 表标题

* @param sheet

* @param heading

* @param colNum

* @throws WriteException

*/

private static void fillHeader(WritableSheet sheet,String heading,int colNum) throws WriteException {

WritableFont font = new WritableFont(WritableFont.ARIAL, 18, WritableFont.BOLD,false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK);//设置字体

WritableCellFormat format = new WritableCellFormat(font);//新建格式化对象

format.setAlignment(Alignment.CENTRE);//设置水平居中对齐

format.setVerticalAlignment(VerticalAlignment.CENTRE);//设置垂直居中对齐

sheet.mergeCells(0,0, colNum-1, 0);//合并单元格

sheet.setRowView(0, 600); // 设置行高

sheet.addCell(new Label(0,0,heading,format));//填写主标题

}

/**

* 填写列名

* @param sheet

* @param table

* @param colNum

* @throws WriteException

*/

private static void fillColName(WritableSheet sheet,JTable table,int colNum) throws WriteException {

WritableFont font = new WritableFont(WritableFont.ARIAL,12,WritableFont.NO_BOLD);//设置字体

WritableCellFormat format = new WritableCellFormat(font);//新建格式化对象

format.setAlignment(Alignment.CENTRE);//设置水平居中对齐

sheet.setColumnView(0, 15);// 设置列宽

for(int col = 0; col colNum;col++) {

Label colName = new Label(col,1,table.getModel().getColumnName(col),format);

sheet.addCell(colName);

}

}

/**

* 填写表格数据到excel

* @param sheet

* @param table

* @param colNum

* @param rowNum

* @throws WriteException

*/

private static void fillCell(WritableSheet sheet,JTable table,int colNum,int rowNum) throws WriteException {

WritableFont font = new WritableFont(WritableFont.ARIAL,12,WritableFont.NO_BOLD);//设置字体

WritableCellFormat format = new WritableCellFormat(font);//新建格式化对象

format.setAlignment(Alignment.CENTRE);//设置水平居中

for(int col = 0;col colNum;col++) {

for(int row = 1;row = rowNum -1;row++) {//填写数据

String value = "";

if(table.getModel().getValueAt(row -1, col) != null)

value = table.getModel().getValueAt(row -1, col).toString();

sheet.addCell(new Label(col,row + 1,value));

}

}

}

/**

* 填写 签名档

* @param sheet

* @param inscribe

* @param colNum

* @param rowNum

* @throws WriteException

*/

private static void fillNote(WritableSheet sheet,String inscribe,int colNum,int rowNum) throws WriteException {

if( inscribe == null || inscribe.length() 1 ) {

inscribe = "导出时间: "+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());

}

WritableFont font = new WritableFont(WritableFont.ARIAL, 9, WritableFont.NO_BOLD,

false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK);// 定义字体

WritableCellFormat format = new WritableCellFormat(font);// 定义格式化对象

format.setAlignment(Alignment.RIGHT);// 水平居中显示

sheet.mergeCells(0, rowNum+3, colNum - 1, rowNum+3);// 合并单元格

sheet.addCell(new Label(0, rowNum+3, inscribe, format));// 填写工作表

}

}

java报表怎么做?

用我现在用的finereport来和题主说下饼图吧,它也是web报表工具。

打开报表,设置百分比数据模板

符合饼图和复合条饼图只支持百分比的系列分隔方式,因此我们计算每个地区的应付金额所占比例是多少,隐藏B列,在C1中输入占比,C2中输入公式:=B2/SUM(B2[!0]),B2[!0]是B2扩展出来的所有单元格,根据情况设置单元格样式等操作。

下面以制作符合饼图为例,选中图表,勾线图表属性表-样式系列中的第二绘图区,将第二绘图区小于百分比的数据改为10,默认为5,表示第二绘图区包含所有小于该百分比的值为:如下图:

根据情况可设置系列标签样式,勾选图表属性表-样式标签中的标签,选中值,设置格式,百分比保留两位小数。

修改图表数据

修改图表属性表-数据图例项值为C2单元格,复合饼图则可设置完成。

预览与保存

保存模板,点击分页预览,即可看到效果。

java怎么做报表功能?

使用 JFreeChart 生成各种样式的图表

限于篇幅的问题我们在这里只实现两种常用的图表,其他类型图表读者可以触类旁通。我们先给出柱状图的实现,饼图的实现再来跟柱状图进行比较。

1 柱状图

package lius.chart.demo;

import java.io.*;

import org.jfree.data.*;

import org.jfree.chart.*;

import org.jfree.chart.plot.*;

/**

* 该类用于演示最简单的柱状图生成

* @author Winter Lau

*/

public class BarChartDemo {

public static void main(String[] args) throws IOException{

CategoryDataset dataset = getDataSet2();

JFreeChart chart = ChartFactory.createBarChart3D(

"水果产量图", // 图表标题

"水果", // 目录轴的显示标签

"产量", // 数值轴的显示标签

dataset, // 数据集

PlotOrientation.VERTICAL, // 图表方向:水平、垂直

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

false, // 是否生成工具

false // 是否生成 URL 链接

);

FileOutputStream fos_jpg = null;

try {

fos_jpg = new FileOutputStream("D:\\fruit.jpg");

ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,400,300,null);

} finally {

try {

fos_jpg.close();

} catch (Exception e) {}

}

}

/**

* 获取一个演示用的简单数据集对象

* @return

*/

private static CategoryDataset getDataSet() {

DefaultCategoryDataset dataset = new DefaultCategoryDataset();

dataset.addValue(100, null, "苹果");

dataset.addValue(200, null, "梨子");

dataset.addValue(300, null, "葡萄");

dataset.addValue(400, null, "香蕉");

dataset.addValue(500, null, "荔枝");

return dataset;

}

/**

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

* @return

*/

private static CategoryDataset getDataSet2() {

DefaultCategoryDataset dataset = new DefaultCategoryDataset();

dataset.addValue(100, "北京", "苹果");

dataset.addValue(100, "上海", "苹果");

dataset.addValue(100, "广州", "苹果");

dataset.addValue(200, "北京", "梨子");

dataset.addValue(200, "上海", "梨子");

dataset.addValue(200, "广州", "梨子");

dataset.addValue(300, "北京", "葡萄");

dataset.addValue(300, "上海", "葡萄");

dataset.addValue(300, "广州", "葡萄");

dataset.addValue(400, "北京", "香蕉");

dataset.addValue(400, "上海", "香蕉");

dataset.addValue(400, "广州", "香蕉");

dataset.addValue(500, "北京", "荔枝");

dataset.addValue(500, "上海", "荔枝");

dataset.addValue(500, "广州", "荔枝");

return dataset;

}

}

2 饼图

package lius.chart.demo;

import java.io.*;

import org.jfree.data.*;

import org.jfree.chart.*;

/**

* 用于演示饼图的生成

* @author Winter Lau

*/

public class PieChartDemo {

public static void main(String[] args) throws IOException{

DefaultPieDataset data = getDataSet();

JFreeChart chart = ChartFactory.createPie3DChart("水果产量图", // 图表标题

data,

true, // 是否显示图例

false,

false

);

// 写图表对象到文件,参照柱状图生成源码

}

/**

* 获取一个演示用的简单数据集对象

* @return

*/

private static DefaultPieDataset getDataSet() {

DefaultPieDataset dataset = new DefaultPieDataset();

dataset.setValue("苹果",100);

dataset.setValue("梨子",200);

dataset.setValue("葡萄",300);

dataset.setValue("香蕉",400);

dataset.setValue("荔枝",500);

return dataset;

}

}

3将生成的图表移到浏览器上

package lius.chart.demo;

import java.io.IOException;

import javax.servlet.*;

import javax.servlet.http.HttpServlet;

import org.jfree.data.*;

import org.jfree.chart.*;

/**

* 演示通过 servlet 直接输出图表

* @author Winter Lau

*/

public class ChartDemoServlet extends HttpServlet {

public void service(ServletRequest req, ServletResponse res)

throws ServletException, IOException

{

res.setContentType("image/jpeg");

DefaultPieDataset data = getDataSet();

JFreeChart chart = ChartFactory.createPie3DChart("水果产量图",

data,

true,

false,

false

);

ChartUtilities.writeChartAsJPEG(res.getOutputStream(),

100,chart,400,300,null);

}

/**

* 获取一个演示用的简单数据集对象

* @return

*/

private static DefaultPieDataset getDataSet() {

DefaultPieDataset dataset = new DefaultPieDataset();

dataset.setValue("苹果",100);

dataset.setValue("梨子",200);

dataset.setValue("葡萄",300);

dataset.setValue("香蕉",400);

dataset.setValue("荔枝",500);

return dataset;

}

}

4高级主题

很多情况我们不仅仅要求可以在浏览器上显示一个图表,我们更需要客户可以直接在图表上做一下交互的操作,例如获取信息提示,点击图表某个部分进行更详细信息的展示等等。例如前面生成的简单柱状图,用户需要在看到柱状图后点击某种水果例如是苹果即可看到各个地区苹果产量的情况。为此就要求该图形具有交互操作的功能。在 HTML 中为了让一个图像具有可交互的功能就必须给该图像定义一个 Map 对象。下表节选一段具有该功能的 HTML 代码:

MAP NAME="chartMap"

AREA SHAPE="RECT" COORDS="81,15,126,254" href="?series=0category=100"

title="100 = 7,048"

onclick="javascript:clickChart('100');return false;"

AREA SHAPE="RECT" COORDS="143,27,188,255" href="?series=0category=200"

title="200 = 6,721"

onclick="javascript: clickChart ('200');return false;"

AREA SHAPE="RECT" COORDS="205,54,250,255" href="?series=0category=300"

title="300 = 5,929"

onclick="javascript: clickChart ('300');return false;"

AREA SHAPE="RECT" COORDS="267,85,312,255" href="?series=0category=400"

title="400 = 5,005"

onclick="javascript: clickChart ('400');return false;"

AREA SHAPE="RECT" COORDS="329,17,374,255" href="?series=0category=Diet"

title="Diet = 7,017" onclick="javascript:

clickChart ('Diet');return false;"

/MAP

由此就产生了一个问题:如果根据一个图像来生成对应的 MAP 对象。我们回头看看刚才的代码,在创建一个图表对象时候有两个参数,我们举柱状图的例子来讲这两个参数就是 ChartFactory. createBarChart3D 方法中的最后两个参数,这两个参数的类型都是布尔值。这两个参数意思分别是:是否创建工具提示 (tooltip) 以及是否生成 URL。这两个参数分别对应着 MAP 中一个 AREA 的 title 属性以及 href 属性。

可是我想知道的是怎么来产生这个 MAP 啊!哈哈,不要着急,JFreeChart 已经帮我们做好生成 MAP 对象的功能。为了生成 MAP 对象就要引入另外一个对象:ChartRenderingInfo。因为 JFreeChart 没有直接的方法利用一个图表对象直接生成 MAP 数据,它需要一个中间对象来过渡,这个对象就是 ChartRenderingInfo。

java做报表

把数据库中需要的数据处理后做成可视化图表,根据不同需求可以做成不同形式的图表,节省时间,效果比较好,报表软件国外的话水晶报表,SAP公司的商业报表工具,作为SAP“集团”下的报表组件模块。10年事前盛行一时,后被SAP收购。但水晶报表(Crystal Report)在理论上只支持单数据集,对多集的支持依赖于数据库的运算能力(叉乘与联合等或写存储过程),多库一般难以支持。

国内的话FineReport,目前国内报表软件领域发展最成熟也是市场份额最高的。IDC的报告里,17年甚至超过SAP,IBM,在这个细分领域,也是Gartner的BI选型市场指南里唯一推荐的报表工具。零代码开发,类似excel的设计方式,上手简单。尤其数据字典、实际值和显示值等的设计更是切入快速开发的要害,这些放在别的语言和体系下往往要大量代码才能实现且频繁需要的功能放在FineReport里却只是几个操作的事情。移动端报表+可视化大屏。

报表生成java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于报表生成后如何进行分析、报表生成java的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-14,除非注明,否则均为首码项目网原创文章,转载请注明出处。