2016-09-22 138 views
2

折れ線グラフでExcelファイルを作成しています。私はグラフを作成し、それをデータで埋めましたが、グラフ上にポイントを作成することはできません。誰もが知っている、私はこれらのポイント(三角形、四角形、円など)をグラフで生成することができる方法は、apache poiを使用していますか?Apache poi Excel折れ線グラフのポイント

enter image description here

これは、現在の文字を生成するための私のコードです:

public static void main(String[] args) throws Exception { 
     Workbook wb = new XSSFWorkbook(); 
     Sheet dataSheet = wb.createSheet("linechart"); 

     final int NUM_OF_ROWS = 10; 
     final int NUM_OF_COLUMNS = 4; 

     Row row; 
     Cell cell; 
     for (int rowIndex = 0; rowIndex < NUM_OF_ROWS; rowIndex++) { 
      row = dataSheet.createRow((short) rowIndex); 
      for (int colIndex = 0; colIndex < NUM_OF_COLUMNS; colIndex++) { 
       cell = row.createCell((short) colIndex); 
       cell.setCellValue(rowIndex * ((colIndex + 1) + ((int) (Math.random() * 10)))); 
      } 
     } 

     Drawing drawing = dataSheet.createDrawingPatriarch(); 
     ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, NUM_OF_COLUMNS + 2, 3, NUM_OF_COLUMNS + 15, 20); 

     Chart chart = drawing.createChart(anchor); 
     ChartLegend legend = chart.getOrCreateLegend(); 
     legend.setPosition(LegendPosition.RIGHT); 

     LineChartData data = chart.getChartDataFactory().createLineChartData(); 

     ChartAxis bottomAxis = chart.getChartAxisFactory().createCategoryAxis(AxisPosition.BOTTOM); 
     ValueAxis leftAxis = chart.getChartAxisFactory().createValueAxis(AxisPosition.LEFT); 
     leftAxis.setCrosses(AxisCrosses.AUTO_ZERO); 

     ChartDataSource<Number> xs = DataSources.fromNumericCellRange(dataSheet, new CellRangeAddress(0, NUM_OF_ROWS - 1, 0, 0)); 
     ChartDataSource<Number> ys1 = DataSources.fromNumericCellRange(dataSheet, new CellRangeAddress(0, NUM_OF_ROWS - 1, 1, 1)); 
     ChartDataSource<Number> ys2 = DataSources.fromNumericCellRange(dataSheet, new CellRangeAddress(0, NUM_OF_ROWS - 1, 2, 2)); 
     ChartDataSource<Number> ys3 = DataSources.fromNumericCellRange(dataSheet, new CellRangeAddress(0, NUM_OF_ROWS - 1, 3, 3)); 

     LineChartSeries series1 = data.addSeries(xs, ys1); 
     series1.setTitle("one"); 
     LineChartSeries series2 = data.addSeries(xs, ys2); 
     series2.setTitle("two"); 
     LineChartSeries series3 = data.addSeries(xs, ys3); 
     series3.setTitle("three"); 

     chart.plot(data, bottomAxis, leftAxis); 

     XSSFChart xssfChart = (XSSFChart) chart; 
     CTPlotArea plotArea = xssfChart.getCTChart().getPlotArea(); 
     plotArea.getLineChartArray()[0].getSmooth(); 
     CTBoolean ctBool = CTBoolean.Factory.newInstance(); 
     ctBool.setVal(false); 
     plotArea.getLineChartArray()[0].setSmooth(ctBool); 
     for (CTLineSer ser : plotArea.getLineChartArray()[0].getSerArray()) { 
      ser.setSmooth(ctBool); 
     } 

     FileOutputStream fileOut = new FileOutputStream("chart.xlsx"); 
     wb.write(fileOut); 
     fileOut.close(); 
    } 

答えて

2

ソリューション:

CTPlotArea plotArea = xssfChart.getCTChart().getPlotArea(); 
CTMarker ctMarker = CTMarker.Factory.newInstance(); 
ctMarker.setSymbol(CTMarkerStyle.Factory.newInstance()); 
for (CTLineSer ser : plotArea.getLineChartArray()[0].getSerArray()) { 
    ser.setMarker(ctMarker); 
} 
0

次のコードは、あなたが

CTPlotArea plotArea = xssfChart.getCTChart().getPlotArea(); 
    plotArea.getLineChartArray()[0].getSmooth(); 
    CTMarker ctMarker = CTMarker.Factory.newInstance(); 
    ctMarker.setSymbol(CTMarkerStyle.Factory.newInstance()); 
    CTBoolean ctBool = CTBoolean.Factory.newInstance(); 
    ctBool.setVal(false); 
    plotArea.getLineChartArray()[0].setSmooth(ctBool); 
    for (CTLineSer ser : plotArea.getLineChartArray()[0].getSerArray()) { 
     ser.setSmooth(ctBool); 
     ser.setMarker(ctMarker); 
    } 
を探している正確に何を与えるだろう
関連する問題