代码之家  ›  专栏  ›  技术社区  ›  Grv

如何使用POI和org在PPT中为条形图添加数据标签。Java中的openxmlformats

  •  1
  • Grv  · 技术社区  · 7 年前

    我正在制作power point演示文稿。每张幻灯片都有一个图形(条形图或饼图)。我正在使用Apache POI库和org。openxmlformats。

    实际输出-

    请在下面找到生成的不带数据标签的图形- Img 1 without data label 预期输出- Img 2 with data label

    代码-

    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();
    

    如果有人能帮我实现目标,那就太好了。 提前谢谢。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Grv    7 年前

    为Openxmlformats库添加数据标签可以通过CTDLbls类实现。查找以下代码段-

            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);