永发信息网

JAVA如何将JFreeChart图片导出到Excel?

答案:4  悬赏:0  手机版
解决时间 2021-11-24 12:19
JAVA如何将JFreeChart图片导出到Excel?
最佳答案
我才做了这个,你看看行不行,我是把生成的图片放到一个临时文件中,然后再用poi将这个图片导入到excel中,代码如下:
package jfreechart;

import java.awt.Font;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.struts2.ServletActionContext;
import org.jfree.chart.ChartFactory;
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.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.DefaultCategoryDataset;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class testBarChart2 extends ActionSupport{
JFreeChart chart;
HttpSession session;
HttpServletRequest request;

@Override
public String execute() throws Exception {
request=ServletActionContext.getRequest();
session=request.getSession();

DefaultCategoryDataset dataset=new DefaultCategoryDataset();
dataset.addValue(1000,"广州","猪肉");
dataset.addValue(220,"广州","牛肉");
dataset.addValue(530,"广州","鸡肉");
dataset.addValue(340,"广州","鱼肉");

chart=ChartFactory.createBarChart3D("肉类销量统计图","肉类","销量",dataset,PlotOrientation.VERTICAL,false,false,false);

Font font=new Font("宋体",Font.BOLD,20);
CategoryPlot plot=(CategoryPlot)chart.getPlot();
TextTitle textTitle=chart.getTitle();
textTitle.setFont(font);//设置标题的字体
CategoryAxis domainAxis=plot.getDomainAxis();//柱状图的x轴
domainAxis.setTickLabelFont(font);//设置x轴坐标上的字体
domainAxis.setLabelFont(font);//设置x轴上的标题的字体
ValueAxis valueAxis=plot.getRangeAxis();//柱状图的y轴
valueAxis.setTickLabelFont(font);//设置y轴坐标上的字体
valueAxis.setLabelFont(font);//设置y轴坐标上的标题的字体


String filename="E:/tomcat/basicsms/apache-tomcat-6.0.18/temp/"+ServletUtilities.saveChartAsPNG(chart,500,300,null,session);

FileOutputStream fileOut = null;
BufferedImage bufferImg = null;

try {

// 先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();

bufferImg = ImageIO.read(new File(filename));
ImageIO.write(bufferImg, "png", byteArrayOut);

// 创建一个工作薄
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet1 = wb.createSheet("new sheet");
HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 512, 255,
(short) 1, 1, (short) 10, 20);

anchor.setAnchorType(2);
// 插入图片
patriarch.createPicture(anchor, wb.addPicture(byteArrayOut
.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG)).resize(0.8);

fileOut = new FileOutputStream("d:/workbook.xls");
// 写入excel文件
wb.write(fileOut);
fileOut.close();

} catch (IOException io) {
io.printStackTrace();
System.out.println("io erorr : " + io.getMessage());
} finally {
if (fileOut != null) {
try {
fileOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

return SUCCESS;
}

public JFreeChart getChart() {
return chart;
}
}
当执行action的时候,图片会在页面显示,也会导入到workbook.xls中,这个例子其实是我在网上找的,然后拼写成的,希望对你有帮助,我目前也在研究当中,也可以共同讨论
其实你要也可以试试jacob,它可以直接在excel中生成图片,你可以自己研究研究
全部回答
用流写出
我是在导出的时候生成一个JFreeChart的图片,到一个目录下,然后用POI将这个图片导入到Excel中,然后再把这个图片删除,我理想的是不生成临时的图片文件,但是目前我还没找到更好的方法,希望对你有帮助
图形默认是加载到你的tocmat缓存里面的
C:\Program Files\Apache Software Foundation\Tomcat 6.0\temp 这个文件里面
导出的时候可以直接读取
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
映众970游戏至尊怎么样啊,和别的品牌比
如何用公积金贷款置换商业贷款
花园人家地址有知道的么?有点事想过去
王者荣耀家长未关联可是进游戏还限制时间
一夜走100度电是什么原因
SAS hbarx ;run;代表啥
这是什么花?有养花高手指导一下喽~
小英雄雨来是几年级的课文人教版
奶奶家养了8只母鸡.养的小鸡只数是母鸡的4被,
大家帮忙看看这个是真玉还是假玉,朋友从台湾
看山就是山.哪里来的感叹是哪首歌的歌词
鸡心包为什么有点苦
北京市家具批发市场有哪些
拓展的队蜜起什么作用?
dnf红眼千猪套怎么样
推荐资讯
芜湖亚原子是做什么开发的,他们实力怎么样
我是新疆的,有yy 频道,但是模板加载不出来
这里作者通过用什么来说明蟋蟀的住宅大小
为什么锁了车车里还有一个小车带钥匙的标志
阚犇犇在山楂树之恋中扮演什么角色
asp.net,我使用MVC4框架搭建了一个项目,我
今天结婚了,等会就洞房了,好紧张啊!
风信子花期一过是不是就死了?
高压锅炖羊蝎子多少分钟。
已知W、X、Y、Z为短周期元素,W、Z同主族,X
一百瓶油重一吨等于多少千克
兀的值一共有多少个数字?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?