簡體   English   中英

如何在Java中使用POI和org.openxmlformats在PPT中為條形圖添加數據標簽

[英]How to add Data Label for a Bar chart in PPT using POI and org.openxmlformats in Java

我正在努力生成一個幻燈片演示文稿。 每個幻燈片都有一個圖形(條形或餅形)。 我正在使用Apache POI庫和org.openxmlformats。

我能夠為圖形繪制數據表,但無法為圖形繪制數據標簽。

實際輸出

請在下面找到沒有數據標簽的生成圖形- 圖1沒有數據標簽 預期產出 圖2帶數據標簽

代碼-

CTChartSpace chartSpace = myXSLFChartShape.getMyXSLFChart().getChartSpace();
    CTChart cTChart = chartSpace.addNewChart();
    CTPlotArea cTPlotArea = cTChart.addNewPlotArea();
    CTBarChart cTBarChart = cTPlotArea.addNewBarChart();
    cTBarChart.addNewVaryColors().setVal(true);
    cTBarChart.addNewBarDir().setVal(STBarDir.COL);
    //int c = 0;
    for (int r = 0; r < 2; r++) {
        //c=1;
        CTBarSer cTBarSer = cTBarChart.addNewSer();
        CTStrRef cTStrRef = cTBarSer.addNewTx().addNewStrRef();
        cTStrRef.setF("Label " + r);
        cTStrRef.addNewStrCache().addNewPtCount().setVal(1);
        CTStrVal cTStrVal = cTStrRef.getStrCache().addNewPt();
        cTStrVal.setIdx(0);
        cTStrVal.setV("Val" + r);

        cTBarSer.addNewIdx().setVal(r);
        cTStrRef = cTBarSer.addNewCat().addNewStrRef();
        cTStrRef.setF("Categories");
        cTStrRef.addNewStrCache().addNewPtCount().setVal(1);

        for (int c = 0; c < 2; c++) {
            cTStrVal = cTStrRef.getStrCache().addNewPt();
            cTStrVal.setIdx(c);             
            cTStrVal.setV("Cat" + c);
        }

        CTNumRef cTNumRef = cTBarSer.addNewVal().addNewNumRef();
        cTNumRef.setF("" + 0);
        cTNumRef.addNewNumCache().addNewPtCount().setVal(1);
        for (int c = 0; c < 2; c++) {
            CTNumVal cTNumVal = cTNumRef.getNumCache().addNewPt();
            cTNumVal.setIdx(c);
            cTNumVal.setV("" + (10 * (c + 1)));
        }
            //c++;
    }

    // telling the BarChart that it has axes and giving them Ids
    cTBarChart.addNewAxId().setVal(123456);
    cTBarChart.addNewAxId().setVal(123457);

    // cat axis
    CTCatAx cTCatAx = cTPlotArea.addNewCatAx();
    cTCatAx.addNewAxId().setVal(123456); // id of the cat axis
    CTScaling cTScaling = cTCatAx.addNewScaling();
    cTScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);
    cTCatAx.addNewDelete().setVal(false);
    cTCatAx.addNewAxPos().setVal(STAxPos.B);
    cTCatAx.addNewCrossAx().setVal(123457); // id of the val axis
    cTCatAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);

    // val axis
    CTValAx cTValAx = cTPlotArea.addNewValAx();
    cTValAx.addNewAxId().setVal(123457); // id of the val axis
    cTScaling = cTValAx.addNewScaling();
    cTScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);
    cTValAx.addNewDelete().setVal(false);
    cTValAx.addNewAxPos().setVal(STAxPos.L);
    cTValAx.addNewCrossAx().setVal(123456); // id of the cat axis
    cTValAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);
    cTValAx.addNewDispUnits();
    // legend


    CTLegend cTLegend = cTChart.addNewLegend();
    cTLegend.addNewLegendPos().setVal(STLegendPos.R);

    CTDTable c = cTPlotArea.addNewDTable();
    c.addNewShowKeys();

如果有人可以幫助我實現目標,那將是很好的。 提前致謝。

通過CTDLbls類可以為Openxmlformats庫添加數據標簽。 找到以下代碼段-

        CTDLbls dLbls = cTBarChart.addNewDLbls();
        dLbls.addNewShowBubbleSize().setVal(false);
        dLbls.addNewShowLegendKey().setVal(false);
        dLbls.addNewShowCatName().setVal(false);
        dLbls.addNewShowSerName().setVal(false);
        dLbls.addNewShowPercent().setVal(false);
        dLbls.addNewShowVal().setVal(true);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM