0
apache poiを使用してExcelファイルに棒グラフを作成しました。プロットエリア外の枠線/余白を削除するにはどうすればよいですか?次の画像の青い枠線の領域。 apache poi bar chartの境界線をExcelで削除する
作成したExcelファイルを編集して青い部分を追加しました。編集前は白だった。このグラフを作成するファンクションコードを次に示します。
public void createBarChart(double[] values, boolean[] passed, String[] labels,
int Dx1, int Dy1, int Dx2, int Dy2,
int row1, int col1, int row2, int col2){
Drawing drawing = sheet.createDrawingPatriarch();
ClientAnchor anchor = drawing.createAnchor(Dx1, Dy1, Dx2, Dy2, col1, row1, col2, row2);
Chart chart = drawing.createChart(anchor);
CTChart ctChart = ((XSSFChart)chart).getCTChart();
CTPlotArea ctPlotArea = ctChart.getPlotArea();
CTBarChart ctBarChart = ctPlotArea.addNewBarChart();
//CTBoolean ctBoolean = ctBarChart.addNewVaryColors();
//ctBoolean.setVal(false);
ctBarChart.addNewBarDir().setVal(STBarDir.COL);
// Add the bars
int length = values.length;
for (int s = 0; s < length; s++) {
CTBarSer ctBarSer = ctBarChart.addNewSer();
CTSerTx ctSerTx = ctBarSer.addNewTx();
ctSerTx.setV(labels[s]);
ctBarSer.addNewIdx().setVal(s);
CTNumDataSource ctNumDataSource = ctBarSer.addNewVal();
CTNumData ctNumData = ctNumDataSource.addNewNumLit();
ctNumData.addNewPtCount().setVal(1);
CTNumVal ctNumVal = ctNumData.addNewPt();
ctNumVal.setIdx(0);
ctNumVal.setV("" + values[s]);
//at least the border lines in Libreoffice Calc ;-)
CTShapeProperties ctShapeProperties = ctBarSer.addNewSpPr();
if(passed[s]) {
// bar color, green: passed
ctShapeProperties.addNewSolidFill().addNewSrgbClr().setVal(new byte[]{0, (byte)128, 0});
}
else {
// bar color, red: failed
ctShapeProperties.addNewSolidFill().addNewSrgbClr().setVal(new byte[]{(byte) 255, 0, 0});
}
//ctShapeProperties.addNewLn().addNewSolidFill().addNewSrgbClr().setVal(new byte[]{0, 0, 0}); // black
ctShapeProperties.addNewLn().addNewSolidFill().addNewSrgbClr().setVal(new byte[]{(byte)255, (byte)255, (byte)255}); // white
}
//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(true);
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(true);
ctValAx.addNewAxPos().setVal(STAxPos.L);
ctValAx.addNewCrossAx().setVal(123456); //id of the cat axis
ctValAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);
// Remove rounded corner
if (((XSSFChart)chart).getCTChartSpace().getRoundedCorners() == null){
((XSSFChart)chart).getCTChartSpace().addNewRoundedCorners();
}
((XSSFChart)chart).getCTChartSpace().getRoundedCorners().setVal(false);
//chart area (chartspace) without border line
((XSSFChart)chart).getCTChartSpace().addNewSpPr().addNewLn().addNewNoFill();
}
はい、私が最初にXSSFChartを作成しました。私はExcelファイル自体から青い枠線を設定します(色を変更するだけで、デフォルトで白です)。私は今あなたの提案とラウンドシェイプを変更することができます。しかし、あなたのコードで青い部分を取り除くことはできませんでした。私は小領域(2セル2セルのように)で私のbarChartを表示する必要があります。だから、私はグラフを大きくするために青い領域を取り除く必要があります。さもなければ、スペースの大部分はその青い部分によって占有されます。 – Masum
@マッサム:「あなたのコードで青い部分を取り除くことができませんでした」:次に、[最小限で完全で検証可能な例](https://stackoverflow.com/help)を提供するまで、/mcve)。 addNewNoFill(); addNewNoFill(); 'は新しく作成された' XSSFChart'を 'chart'と組み合わせて動作します。おそらく、それは '((XSSFChart)chart).getCTChartSpace()。getSpPr()。unsetLn();'最初にそして次に((XSSFChart)チャート).getCTChartSpace()。getSpPr()。addNewLn()。addNewNoFill() )); 'あなたのために。しかし、これは野生の推測だけです。 –
私のコードを追加しました。ありがとう! – Masum