POI导出excel+JFreeChart生成图表(柱状图和折线图)

根据查询的数据生成excel和图表,excel并且支持分页,这次分页的方法和上一篇文章的方法不同,这次的方法是在查询出数据的时候就开始设置了,在将查询结果写到list集合的时候就分多个集合在存储,最后在将结果添加到另一个list中,如List>。最后遍历就可以实现分页的效果。代码:

 

public static void msgExportExcel(String code,SXSSFWorkbook wb, List title,
			List> resultList,List chartShow) {
		
		SXSSFSheet sheet =null; 
		File file =null;
		int size = resultList.size();//sheet数
		try {
		for(int i =0;i list = resultList.get(i);
			for(int j=0;j

下面就是生成柱状图和折线图了,方法如:

折线图:

public static File createChartLine(List list,String title,String xTitle,String yTitle,String num){
		
//	public static void main(String args[]){
		//构造数据集合
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		for(int i=0;list!=null && i

柱状图:

 

public static File createChartBar(List list,String title,String xTitle,String yTitle,String num){
		
		DefaultCategoryDataset dataset = new DefaultCategoryDataset(); 
		for(int i=0;list!=null && i

关键的问题就是如何将生成的图表写入到excel中呢?这个时候就需要IO流来完成了,代码如下:

 

private static void imageOut(SXSSFWorkbook wb,SXSSFSheet sheet,File file) {
		
		ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
		BufferedImage bufferImg;
		try {
			bufferImg = ImageIO.read(file);
			ImageIO.write(bufferImg, "png", byteArrayOut);
			Drawing dp = sheet.createDrawingPatriarch();
			XSSFClientAnchor anchor = new XSSFClientAnchor(0,0,512,255,7,4,10,20);//设置图表在excel中位置
			anchor.setAnchorType(2);
			dp.createPicture(anchor,wb.addPicture(byteArrayOut.toByteArray(),wb.PICTURE_TYPE_PNG)).resize(0.8);
			
		} catch (IOException e) {
			e.printStackTrace();
			logger.error(e.getMessage());
		}
		
	}

 

在生成excel后最好将在容器中生成的图表删除:

 

 

if(file.exists()){
			file.delete();
		}

扫描下方二维码关注公众号,及时获取文章推送

POI导出excel+JFreeChart生成图表(柱状图和折线图)_第1张图片

 

 

 

 

 

 

你可能感兴趣的:(POI)