2017-07-26 6 views
1

バーとラインの両方でグラフを作成することは可能ですか?例hereがあります。apache poi:バーとラインの両方でチャートを作成するには?

「はい」の場合は、これを達成するためのサンプルコードを提供してください。

お待ちしております。前もって感謝します。

+0

これは、ここで示した他のすべてのチャートの例と同じです。 'Excel'で最も単純なバージョンのチャートを作成します。 '* .xlsx'で保存してください。 '* .xlsx'を解凍してください。 '/ xl/charts/chart * .xml'の' XML'を見てください。低レベル 'CT *'クラスを使って 'apache poi'を使ってこれを作成してみてください。 –

答えて

0

これは私が見つけた解決策です。 残念ながら折れ線グラフの軸を変更できませんでした。しかし、これをファイル上で手動で簡単に変更することができます。ファイルを開くときに、右のボタンをクリックして線シリーズの一番上をクリックし、「フォーマットデータシリーズ」を選択すると、最初に主軸に、次に副軸に変更できます。完璧なチャート!私はあなたが私とそれを共有してくださいを知っている場合、コード上でこれを修正する方法を本当に知りません!

あなたはjar ooxml-schemas-1.3.jarが必要です。 15MBのフルです。 https://mvnrepository.com/artifact/org.apache.poi/ooxml-schemas/1.3

私は助けてくれることを願っています!

XSSFWorkbook workbook=new XSSFWorkbook(); 
    XSSFSheet chartdisplay=workbook.createSheet("ChartDisplay") 
    XSSFDrawing drawing=chartdisplay.createDrawingPatriarch(); 
    ClientAnchor anchor=drawing.createAnchor(0,0,0,0,5,5,13,13); 
    Chart chart=drawing.createChart(anchor); 

    CTChart ctChart=((XSSFChart)chart).getCTChart(); 
    CTPlotArea ctPlotArea=ctChart.getPlotArea(); 
    //Bar Chart 
    CTBarChart ctBarChart=ctPlotArea.addNewBarChart(); 
    CTBoolean ctBoolean=ctBarChart.addNewVaryColors(); 
    ctBoolean.setVal(false); 
    ctBarChart.addNewBarDir().setVal(STBarDir.COL); 
    CTBarSer ctBarSer=ctBarChart.addNewSer(); 
    CTSerTx ctSerTx=ctBarSer.addNewTx(); 
    CTStrRef ctStrRef=ctSerTx.addNewStrRef(); 
    ctStrRef.setF("\"BarSeriesName\""); 
    //Labels For Bar Chart 

    ctBarSer.addNewIdx().setVal(0); //0 = Color Blue 
    CTAxDataSource ctAxDataSource=ctBarSer.addNewCat(); 
    ctStrRef=ctAxDataSource.addNewStrRef(); 
    String labelsRefer="ChartDisplay!B2:B7";//Excel Range where the Labels Are 
    ctStrRef.setF(labelsRefer); 
    //Values For Bar Chart 
    CTNumDataSource ctNumDataSource=ctBarSer.addNewVal(); 
    CTNumRef ctNumRef=ctNumDataSource.addNewNumRef(); 
    String valuesRefer="ChartDisplay!C2:C7";//Excel range where values for barChart are 
    ctNumRef.setF(valuesRefer); 
    ctBarSer.addNewSpPr().addNewLn().addNewSolidFill().addNewSrgbClr().setVal(new byte[]{0,0,0}); 
    // Axis 
    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.L); 
    ctCatAx.addNewCrossAx().setVal(123457); //id of the val axis 
    ctCatAx.addNewMinorTickMark().setVal(STTickMark.NONE); 
    ctCatAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO); 

    //val Left Axis 
    CTValAx ctValAx1=ctPlotArea.addNewValAx(); 
    ctValAx1.addNewAxId().setVal(123457); //id of the val axis 
    ctScaling=ctValAx1.addNewScaling(); 
    ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX); 
    ctValAx1.addNewDelete().setVal(false); 
    ctValAx1.addNewAxPos().setVal(STAxPos.L); 
    ctValAx1.addNewCrossAx().setVal(123456); //id of the cat axis 
    ctValAx1.addNewMinorTickMark().setVal(STTickMark.NONE); 
    ctValAx1.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO); 
    ctValAx1.addNewMajorGridlines(); 

    // =======Line Chart 
    //val Right Axis 
    CTLineChart ctLineChart=ctPlotArea.addNewLineChart(); 
    CTBoolean ctBooleanLine=ctLineChart.addNewVaryColors(); 
    ctBooleanLine.setVal(false); 
    CTLineSer ctLineSer=ctLineChart.addNewSer(); 
    CTSerTx ctSerTx1=ctLineSer.addNewTx(); 
    CTStrRef ctStrRef1=ctSerTx1.addNewStrRef(); 
    ctStrRef1.setF("\"LineSeriesName\""); 
    ctLineSer.addNewIdx().setVal(2); //2= Color Grey 
    CTAxDataSource ctAxDataSource1=ctLineSer.addNewCat(); 
    ctStrRef1=ctAxDataSource1.addNewStrRef(); 
    ctStrRef1.setF(labelsRefer); 
    ctLineSer.addNewSpPr().addNewSolidFill().addNewSrgbClr().setVal(new byte[]{0,0,0}); 

    String values2Refer="ChartDisplay!D2:D7"; //Excel Range Where Values for Line Values are 
    CTNumDataSource ctNumDataSource1=ctLineSer.addNewVal(); 
    CTNumRef ctNumRef1=ctNumDataSource1.addNewNumRef(); 
    ctNumRef1.setF(values2Refer); 

    //Axis 
    ctLineChart.addNewAxId().setVal(1234);//id of the cat axis 
    ctLineChart.addNewAxId().setVal(12345); 

    CTCatAx ctCatAx1=ctPlotArea.addNewCatAx(); 
    ctCatAx1.addNewAxId().setVal(1234);// id of the cat Axis 
    ctScaling=ctCatAx1.addNewScaling(); 
    ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX); 
    ctCatAx1.addNewDelete().setVal(true); 
    ctCatAx1.addNewAxPos().setVal(STAxPos.R); 
    ctCatAx1.addNewCrossAx().setVal(12345); //id of the val axis 
    CTBoolean ctBoolean1=ctCatAx1.addNewAuto(); 


    CTValAx ctValAx=ctPlotArea.addNewValAx(); 
    ctValAx.addNewAxId().setVal(12345); //id of the val axis 
    ctScaling=ctValAx.addNewScaling(); 
    ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX); 
    ctValAx.addNewDelete().setVal(false); 
    ctValAx.addNewAxPos().setVal(STAxPos.R); 
    ctValAx.addNewCrossAx().setVal(1234); //id of the cat axis 
    ctValAx.addNewMinorTickMark().setVal(STTickMark.NONE); 
    ctValAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO); 

    //Legend 
    CTLegend ctLegend=ctChart.addNewLegend(); 
    ctLegend.addNewLegendPos().setVal(STLegendPos.B); 
    ctLegend.addNewOverlay().setVal(false); 
関連する問題