1
これは自分のコードであり、結果を正常に生成します。私はちょうどプロットのためのグリッド線を追加したいが、私はそれを管理することができませんでした。誰でもこの問題に関して助けてもらえますか?Apache POIを使用して線グラフにグリッド線を追加する方法
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.usermodel.charts.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFChart;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.openxmlformats.schemas.drawingml.x2006.chart.*;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.*;
public class PlotCT {
public static void main (String[] args) throws Exception {
Workbook wb = new XSSFWorkbook();
Sheet dataSheet = wb.createSheet("linechart");
dataSheet.setDisplayGridlines(true);
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");
bottomAxis.setMajorTickMark(AxisTickMark.CROSS);
bottomAxis.setMinorTickMark(AxisTickMark.IN);
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.addNewSpPr().addNewSolidFill().addNewSrgbClr().setVal(new byte[] {0,0,0});
ser.setSmooth(ctBool);
}
CTMarker ctMarker = CTMarker.Factory.newInstance();
ctMarker.setSymbol(CTMarkerStyle.Factory.newInstance());
for (CTLineSer ser : plotArea.getLineChartArray()[0].getSerArray()) {
ser.setMarker(ctMarker);
}
plotArea.addNewSpPr().addNewLn().addNewSolidFill().addNewSrgbClr().setVal(new byte[] {11,0,0});
CTFill myPatternFill= CTFill.Factory.newInstance();
CTPatternFill pFill=myPatternFill.addNewPatternFill();
pFill.setPatternType(STPatternType.DARK_DOWN);
//plotArea.addNewSpPr().addNewLn().addNewGradFill().addNewLin();
// plotArea.addNewSpPr().addNewBlipFill().addNewBlip();
//CTTableGrid ctTableGrid = CTTableGrid.Factory.newInstance();
//ctTableGrid.addNewGridCol();
FileOutputStream fileOut = new FileOutputStream("chart.xlsx");
wb.write(fileOut);
fileOut.close();
System.out.println("complete!");
}
}
これは私が得たもので、 existing result
これは私が欲しいものである、 desired result
誰もがこの問題について私を助けることができますか?
xlsxファイルを7zなどのアーカイブプログラムで開くこともできます。xl/charts/chart1.xmlに移動してくださいPOI Chartクラスのメソッドと同じ名前を持つことができるいくつかのプロパティをxmlファイル内に見つける –