Ir ao conteúdo

Java Uso da biblioteca Apache POI


Ir à solução Resolvido por dcm50,

Posts recomendados

Postado

Olá,

Preciso alterar somente a primeira e a última barra para que ambas não ficam aparecendo só a metade.

image.png.01b3a0feac4062eeef0bce08d10e5805.png

 

Segue o código que gera o gráfico acima

 

    private ByteArrayInputStream generateFileDetails(List<ClientDataRequest> clientDataRequest, String metricName){

        ByteArrayOutputStream file = new ByteArrayOutputStream();

        try{
            try(XSSFWorkbook workbook = new XSSFWorkbook()){
                XSSFSheet sheet = workbook.createSheet(metricName);
                Font headerFont = workbook.createFont();
                headerFont.setBold(true);
                headerFont.setUnderline(Font.U_SINGLE);
                CellStyle headerCellStyle = workbook.createCellStyle();
                headerCellStyle.setFillBackgroundColor(IndexedColors.GREY_40_PERCENT.getIndex());
                headerCellStyle.setFont(headerFont);

                XSSFDrawing drawing = sheet.createDrawingPatriarch();
                XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 5, 1, 14, 10 + clientDataRequest.size());

                Row headerRow = sheet.createRow(anchor.getRow2()+1);
                headerRow.createCell(0).setCellValue("Client Name");
                headerRow.createCell(1).setCellValue("Value");

                for (int i = 0; i < headerRow.getLastCellNum(); i++) {
                    headerRow.getCell(i).setCellStyle(headerCellStyle);
                }

                for (int i = 0; i < clientDataRequest.size(); i++) {
                    Row row = sheet.createRow(anchor.getRow2() + 2 + i);
                    row.createCell(0).setCellValue(clientDataRequest.get(i).getClientName());
                    sheet.autoSizeColumn(0);
                    row.createCell(1).setCellValue(clientDataRequest.get(i).getValue());
                    sheet.autoSizeColumn(1);
                }

                XSSFChart chart = drawing.createChart(anchor);
                chart.setTitleText(metricName);
                chart.setTitleOverlay(false);

                //XDDFChartLegend legend = chart.getOrAddLegend();
                //legend.setPosition(LegendPosition.TOP_RIGHT);

                XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
                bottomAxis.setTitle("Client Name");
                XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);
                leftAxis.setTitle("Value");
                leftAxis.setCrosses(AxisCrosses.AUTO_ZERO);

                XDDFDataSource<String> clientNames = XDDFDataSourcesFactory.fromStringCellRange(sheet,
                        new CellRangeAddress(anchor.getRow2() + 2, anchor.getRow2() + 1 + clientDataRequest.size(), 0, 0));

                XDDFNumericalDataSource<Double> values = XDDFDataSourcesFactory.fromNumericCellRange(sheet,
                        new CellRangeAddress(anchor.getRow2() + 2, anchor.getRow2() +1 + clientDataRequest.size(), 1, 1));

                XDDFChartData data = chart.createData(ChartTypes.BAR, bottomAxis, leftAxis);
                XDDFChartData.Series series = data.addSeries(clientNames, values);
                series.setTitle(metricName, null);
                data.setVaryColors(false);
                chart.plot(data);

                XDDFBarChartData bar = (XDDFBarChartData) data;
                bar.setBarDirection(BarDirection.BAR);

                workbook.write(file);
            }
        } catch (Exception e){

        }

        return new ByteArrayInputStream(file.toByteArray());

    }

 

  • Amei 1
  • Solução
Postado

Consegui resolver.

Basta adicionar essa linha

 

leftAxis.setCrossBetween(AxisCrossBetween.BETWEEN);

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!