java操作excel生成图表,不是图片

yufengdxw 2013-07-03 11:44:34
java从数据库中获取数据,利用这些数据,在excel中生成图表(折线、柱状图等)。不知道哪个开源jar提供了这种接口呢
...全文
1903 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
alex_sijin 2015-02-28
  • 打赏
  • 举报
回复
import com.jxcell.*;

import java.awt.*;

public class ChartFormatTest
{
public static void main(String args[])
{

View m_view = new View();

RangeRef newRange = null;

try {
m_view.getLock();
//标题 setTextAsValue(行,列,值);
m_view.setTextAsValue(1,2,"Jan");
m_view.setTextAsValue(1,3,"Feb");
m_view.setTextAsValue(1,4,"Mar");
m_view.setTextAsValue(1,5,"Apr");
//分项
m_view.setTextAsValue(2,1,"香蕉");
m_view.setTextAsValue(3,1,"大鸭梨");
m_view.setTextAsValue(4,1,"芒果");
m_view.setTextAsValue(5,1,"水果1");
m_view.setTextAsValue(6,1,"水果2");
m_view.setTextAsValue(7,1,"共计");
//
m_view.setTextAsValue(1,6,"time");
m_view.setNumber(2,6,1);
m_view.setNumber(3,6,2);
m_view.setNumber(4,6,3);
m_view.setNumber(5,6,4);
m_view.setNumber(6,6,5);
m_view.setNumber(7,6,6);

//数据区域随机赋值
for(int col = 2; col <= 5; col++)
for(int row = 2; row <= 7; row++)
m_view.setFormula(row, col, "rand()");//rand()为excle随机函数
//设置公式
m_view.setFormula(7, 2, "SUM(C3:C7)");
//选中单元格区域
m_view.setSelection("C8:F8");
//编辑复制 向右复制
m_view.editCopyRight();

//绘图区坐标addChart(左上列x,左上行y,右下列x,右下行y)
ChartShape chart = m_view.addChart(0, 9.1, 7, 20.4);
//图标形式
chart.setChartType(ChartShape.TypeLine);
/*
TypeBar:横向柱状图
TypePie:饼状图
TypeLine:线状图
TypeArea:面积图
TypeDoughnut:圈图
TypeScatter:线点图
TypeBubble:没怎么看懂,就是一个灰图,不过查阅资料,貌似是泡状图
*/

//设置连接区域
chart.setLinkRange("Sheet1!$C$2", false);

//添加一个系列
chart.addSeries();
//系列名字
chart.setSeriesName(0, "Sheet1!$C$2");
//系列值
chart.setSeriesYValueFormula(0, "Sheet1!$C$3:$C$7");
//系列分类
chart.setCategoryFormula("Sheet1!$B$3:$B$7");

chart.addSeries();
chart.setSeriesName(1, "Sheet1!$D$2");
chart.setSeriesYValueFormula(1, "Sheet1!$D$3:$D$7");

chart.addSeries();
chart.setSeriesName(2, "Sheet1!$E$2");
chart.setSeriesYValueFormula(2, "Sheet1!$E$3:$E$7");

chart.addSeries();
chart.setSeriesName(3, "Sheet1!$F$2");
chart.setSeriesYValueFormula(3, "Sheet1!$F$3:$F$7");

// chart.getChart().validateData();

//设置横坐标标题
chart.setAxisTitle(ChartShape.XAxis, 0, "横坐标标题");
//设置纵坐标标题
chart.setAxisTitle(ChartShape.YAxis, 0, "纵坐标标题");

//设置图表样式
ChartFormat cf = chart.getChartFormat();
//设置背景色
cf.setPattern((short)1);
cf.setPatternFG(Color.LIGHT_GRAY.getRGB());
chart.setChartFormat(cf);
//设置绘图区颜色
cf = chart.getPlotFormat();
cf.setPattern((short)1);
cf.setPatternFG(new Color(204, 255, 255).getRGB());
chart.setPlotFormat(cf);

//设置横坐标文字大小
cf = chart.getAxisFormat(ChartShape.XAxis, 0);
cf.setFontSizeInPoints(8.5);
chart.setAxisFormat(ChartShape.XAxis, 0, cf);

//设置纵坐标文字大小
cf = chart.getAxisFormat(ChartShape.YAxis, 0);
cf.setFontSizeInPoints(8.5);
chart.setAxisFormat(ChartShape.YAxis, 0, cf);

//设置图标内标线样式
cf = chart.getSeriesFormat(0);//地0个
cf.setLineStyle((short)1);
cf.setLineWeight(3*20);
cf.setLineColor((new Color(0, 0, 128)).getRGB());
cf.setMarkerAuto(false);
cf.setMarkerStyle((short)0);
chart.setSeriesFormat(0, cf);

cf = chart.getSeriesFormat(1);
cf.setLineStyle((short)1);
cf.setLineWeight(3*20);
cf.setLineColor((new Color(255, 0, 255)).getRGB());
cf.setMarkerAuto(false);
cf.setMarkerStyle((short)0);
chart.setSeriesFormat(1, cf);

cf = chart.getSeriesFormat(2);
cf.setLineStyle((short)1);
cf.setLineWeight(3*20);
cf.setLineColor((new Color(255, 255, 0)).getRGB());
cf.setMarkerAuto(false);
cf.setMarkerStyle((short)0);
chart.setSeriesFormat(2, cf);

cf = chart.getSeriesFormat(3);
cf.setLineStyle((short)1);
cf.setLineWeight(3*20);
cf.setLineColor((new Color(0, 255, 255)).getRGB());
cf.setMarkerAuto(false);
cf.setMarkerStyle((short)0);
chart.setSeriesFormat(3, cf);

//主格网
cf = chart.getMajorGridFormat(ChartShape.YAxis, 0);
cf.setLineStyle((short)2);
cf.setLineColor((new Color(255, 0, 0)).getRGB());
cf.setLineAuto();
chart.setMajorGridFormat(ChartShape.YAxis, 0, cf);

//图利位置
chart.setLegendPosition(ChartFormat.LegendPlacementRight);

//图利样式
cf = chart.getLegendFormat();
cf.setFontBold(true);
cf.setFontSizeInPoints(8);
chart.setLegendFormat(cf);


//excel写出路径
m_view.write("c:\\out.xls");
System.out.println("end");
}
catch (Exception e) {
System.out.println(e.getMessage());
}
finally
{
m_view.releaseLock();
}
}
}
CYL_TING 2014-12-26
  • 打赏
  • 举报
回复
jfreechart能生成图标,但是excel透视图用什么自动生成呢?
liucongcong7879 2014-10-21
  • 打赏
  • 举报
回复
引用 11 楼 nai598455803 的回复:
[quote=引用 10 楼 fuhao91 的回复:] [quote=引用 8 楼 yufengdxw 的回复:] [quote=引用 5 楼 nai598455803 的回复:] jfreechart 这个就是专门处理那些图表的,很实用。 比较靠谱
jfreechart哪能处理图表啊!数据编辑和公式引用倒是可以[/quote] 请问你用过吗?人家说这个可以知道有这个功能的!我就用过不过他是直接生成的图片形式的图表![/quote] 当然可以了,不然岂不是在这瞎说, java从数据库中获取数据,利用这些数据,生成图表(折线、柱状图等)[/quote] 能生成这些折线,柱状图,饼图等,但是生成的是图片,导入到excel中不能编辑,有没有可以生成可编辑的图表,就像操作excel生成自带的那种
strSpecial 2014-06-26
  • 打赏
  • 举报
回复
请问楼主问题解决了吗,同问
yufengdxw 2013-07-05
  • 打赏
  • 举报
回复
引用 10 楼 fuhao91 的回复:
[quote=引用 8 楼 yufengdxw 的回复:] [quote=引用 5 楼 nai598455803 的回复:] jfreechart 这个就是专门处理那些图表的,很实用。 比较靠谱
jfreechart哪能处理图表啊!数据编辑和公式引用倒是可以[/quote] 请问你用过吗?人家说这个可以知道有这个功能的!我就用过不过他是直接生成的图片形式的图表![/quote] 图表在web页面中显示,我也是利用jfreechart做的。不过我的问题不是这个
yufengdxw 2013-07-05
  • 打赏
  • 举报
回复
引用 13 楼 zhaoxiancheng 的回复:
[quote=引用 7 楼 yufengdxw 的回复:] [quote=引用 4 楼 zhaoxiancheng 的回复:] 用jfreechart在java生成图表图片,然后放到execl里,不知道可不可以
我现在就是这么做的,可以它是图片,不能数据,所以感觉导入到excel中没有太大的意义了。 [/quote] 还有一种方式,excel有透视区,你可以先做个excel模板,模板中有透视区,图表,图表的数据就从透视区中取,然后通过POI往这个模板中写数据,导出。我之前有做过,excel中的sheet1是透视区,sheet2,sheet3从sheet1中自动取数据。java导出数据时,只需要往sheet1中写数据。 [/quote] 透视区中的数据,excel中sheet2...会自动引用这些数据生成图表?
zhaoxiancheng 2013-07-05
  • 打赏
  • 举报
回复
引用 7 楼 yufengdxw 的回复:
[quote=引用 4 楼 zhaoxiancheng 的回复:] 用jfreechart在java生成图表图片,然后放到execl里,不知道可不可以
我现在就是这么做的,可以它是图片,不能数据,所以感觉导入到excel中没有太大的意义了。 [/quote] 还有一种方式,excel有透视区,你可以先做个excel模板,模板中有透视区,图表,图表的数据就从透视区中取,然后通过POI往这个模板中写数据,导出。我之前有做过,excel中的sheet1是透视区,sheet2,sheet3从sheet1中自动取数据。java导出数据时,只需要往sheet1中写数据。
效林少爷 2013-07-05
  • 打赏
  • 举报
回复
引用 11 楼 nai598455803 的回复:
[quote=引用 10 楼 fuhao91 的回复:] [quote=引用 8 楼 yufengdxw 的回复:] [quote=引用 5 楼 nai598455803 的回复:] jfreechart 这个就是专门处理那些图表的,很实用。 比较靠谱
jfreechart哪能处理图表啊!数据编辑和公式引用倒是可以[/quote] 请问你用过吗?人家说这个可以知道有这个功能的!我就用过不过他是直接生成的图片形式的图表![/quote] 当然可以了,不然岂不是在这瞎说, java从数据库中获取数据,利用这些数据,生成图表(折线、柱状图等)[/quote] 正解
nai598455803 2013-07-05
  • 打赏
  • 举报
回复
引用 10 楼 fuhao91 的回复:
[quote=引用 8 楼 yufengdxw 的回复:] [quote=引用 5 楼 nai598455803 的回复:] jfreechart 这个就是专门处理那些图表的,很实用。 比较靠谱
jfreechart哪能处理图表啊!数据编辑和公式引用倒是可以[/quote] 请问你用过吗?人家说这个可以知道有这个功能的!我就用过不过他是直接生成的图片形式的图表![/quote] 当然可以了,不然岂不是在这瞎说, java从数据库中获取数据,利用这些数据,生成图表(折线、柱状图等)
yufengdxw 2013-07-04
  • 打赏
  • 举报
回复
引用 2 楼 seashouwang 的回复:
可以使用flex中提供的armchars插件进行图标生成,不过这个最好是重写插件中的方法,这是显示效果很好的插件,像 higchars,juqery 提供的jplog,这些都是免费的,但是显示的不是三位效果,不是怎么好看的,不过做一些简单的图标还是可以的。
你这是在插件,直接在页面绘图吧。我需要的是操作excel!
yufengdxw 2013-07-04
  • 打赏
  • 举报
回复
引用 5 楼 nai598455803 的回复:
jfreechart 这个就是专门处理那些图表的,很实用。 比较靠谱
jfreechart哪能处理图表啊!数据编辑和公式引用倒是可以
yufengdxw 2013-07-04
  • 打赏
  • 举报
回复
引用 4 楼 zhaoxiancheng 的回复:
用jfreechart在java生成图表图片,然后放到execl里,不知道可不可以
我现在就是这么做的,可以它是图片,不能数据,所以感觉导入到excel中没有太大的意义了。
昵称被占用 2013-07-04
  • 打赏
  • 举报
回复
引用 8 楼 yufengdxw 的回复:
[quote=引用 5 楼 nai598455803 的回复:] jfreechart 这个就是专门处理那些图表的,很实用。 比较靠谱
jfreechart哪能处理图表啊!数据编辑和公式引用倒是可以[/quote] 请问你用过吗?人家说这个可以知道有这个功能的!我就用过不过他是直接生成的图片形式的图表!
失落夏天 2013-07-03
  • 打赏
  • 举报
回复
你自己编个吧。。 POI反正不支持。。 如果java能完全利用execl的每一项功能的话,那就太强大了。
  • 打赏
  • 举报
回复
jfreechart比较不错,生成网页图表挺简单,但是要再弄成excel的图表感觉有点困难,要比较熟悉java对excel的接口支持,貌似支持不到这里。
nai598455803 2013-07-03
  • 打赏
  • 举报
回复
jfreechart 这个就是专门处理那些图表的,很实用。 比较靠谱
zhaoxiancheng 2013-07-03
  • 打赏
  • 举报
回复
用jfreechart在java生成图表图片,然后放到execl里,不知道可不可以
starsky20 2013-07-03
  • 打赏
  • 举报
回复
下载地址: http://www.amcharts.com/
starsky20 2013-07-03
  • 打赏
  • 举报
回复
可以使用flex中提供的armchars插件进行图标生成,不过这个最好是重写插件中的方法,这是显示效果很好的插件,像 higchars,juqery 提供的jplog,这些都是免费的,但是显示的不是三位效果,不是怎么好看的,不过做一些简单的图标还是可以的。

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧