Excel通过poi设置折线图样式

本文介绍了如何使用Java的poi库来创建并详细设置Excel折线图的样式,包括图例、标题、坐标轴的样式,如颜色、字体、线条粗细和虚实效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  最近通过poi实现了一整套由 07版excel生成折线图、柱状图及混合双轴图形,本文将记录折线图中的关于图例、标题、坐标轴的各种样式。其中包括颜色、字体、粗细、虚实等。直接上代码吧

 

 

package com.ai.util.excel.chart.export;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.streaming.SXSSFRow;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFChart;
import java.awt.Color;

import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.xmlbeans.XmlBoolean;
import org.openxmlformats.schemas.drawingml.x2006.chart.*;
import org.openxmlformats.schemas.drawingml.x2006.main.*;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by LCK-XM on 2020/9/16.
 *  自动生成折线图,支持样式自定义
 */
public class ExcelLineChartDemo {
    private static SXSSFWorkbook wb = new SXSSFWorkbook();
    private SXSSFSheet sheet = null;

    public static void main(String[] args) { // 字段名
        // 标题
        List<String> titleArr = new ArrayList<String>();
        //行别   2013年  2014年  2015年  2016年  2017上半年    2017年  2018上半年    2018年  2019上半年    2019年  2020上半年
        titleArr.add("行别");
        titleArr.add("2013年");
        titleArr.add("2014年");
        titleArr.add("2015年");
        titleArr.add("2016年");
        titleArr.add("2017上半年");
        titleArr.add("2017年");
        titleArr.add("2018上半年");
        titleArr.add("2018年");
        titleArr.add("2019上半年");
        titleArr.add("2019年");
        titleArr.add("2020上半年");
        // 模拟数据
        List<Map<String, Object>> dataList = intData();
        String fileName = "模拟数据";
        ExcelLineChartDemo demo  = new ExcelLineChartDemo() ;
        try {
            // 创建折线图
            demo.createTimeXYChar(titleArr, dataList,fileName);
            //导出到文件
            String savePath ="D:/excel/chart/"+fileName+"_" + System.currentTimeMillis() + ".xlsx" ;
            FileOutputStream out = new FileOutputStream(new File(savePath));
            wb.write(out);
            out.close();
            System.out.println(savePath);
//            Runtime.getRuntime().exec("cmd /c start  "+savePath);
//       Runtime.getRuntime().exec("rundll32 url.dll FileProtocolHandler   "+savePath);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }




    /**
     * 创建折线图
     *
     * @throws IOException
     */
    public void createTimeXYChar(List<String> titleArr,  List<Map<String, Object>> dataList,String fileName) {
        sheet = wb.createSheet(fileName);
        boolean result = drawSheetMap(sheet, dataList, titleArr);
        System.out.println("生成折线图-->" + result);
    }
    /**
     * 生成折线图
     *
     * @param sheet
     *            页签
     * @param dataList
     *            填充数据
     * @param titleArr
     *            图例标题
     * @return
     */
    private boolean drawSheetMap(SXSSFSheet sheet, List<Map<String, Object>> dataList, List<String> titleArr) {
        boolean result = false;
        // 获取sheet名称
        String sheetName = sheet.getSheetName();
        result = drawSheet0Table(sheet, titleArr, dataList);
        // 创建一个画布
        Drawing<?> drawing = sheet.createDrawingPatriarch();
        // 画一个图区域
        // 前四个默认0,开始列 开始行 结束列 结束行
        ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 1, dataList.size()+3, 15,dataList.size()+25);
        // 创建一个chart对象
        XSSFChart chart =(XSSFChart) drawing.createChart(anchor);
        CTChart ctChart =chart.getCTChart();
        CTPlotArea ctPlotArea = ctChart.getPlotArea();
        //设置画布边框样式
        CTChartSpace space = chart.getCTChartSpace();
        space.addNewRoundedCorners().setVal(false);//去掉圆角

        //设置图表位置
        //CTManualLayout manualLayout = chart.getManualLayout().getCTManualLayout();




         /*// 设置图表标题 setting chart title
        ((XSSFChart) chart).setTitleText("图表Demo");
        // 标题的位置(于图表上方或居中覆盖)
       ctChart.getTitle().addNewOverlay().setVal(false);
        ctChart.addNewShowDLblsOverMax().setVal(true);
        CTTitle tt  = ctChart.addNewTitle();
        ctChart.setTitle(tt);*/
      //设置标题方法2
        CTTitle ctTitle = ctChart.addNewTitle();
        ctTitle.addNewOverlay().setVal(false);// true时与饼图重叠
        ctTitle.addNewTx().addNewRich().addNewBodyPr();
        CTTextBody rich = ctTitle.getTx().getRich();
        rich.addNewLstStyle();
        CTRegularTextRun newR = rich.addNewP().addNewR();
        newR.setT(sheetName);  //标题名称
        newR.addNewRPr().s
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灵异生物

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值