Como trabalhar com tabelas em Java

Como trabalhar com tabelas em Java

Este guia mostra como criar tabelas em slides do PowerPoint usando Aspose.Slides FOSS para Java. Call slide.getShapes().addTable(x, y, colWidths, rowHeights) para adicionar uma tabela, acessar células via table.getRows().get(row).get(col), e aplicar a formatação de texto através do IPortionFormat em cada célula.

Guia passo a passo

Passo 1: Adicionar a dependência Maven

Adicione a seguinte dependência ao seu pom.xml para incluir Aspose.Slides FOSS no seu projecto:

<dependency>
  <groupId>org.aspose</groupId>
  <artifactId>aspose-slides-foss</artifactId>
  <version>26.7.0</version>
</dependency>

Passo 2: Crie ou abra uma apresentação

Utilizam-se recursos para construir um sistema de gestão da informação. Presentation, acessar o primeiro slide via prs.getSlides().get(0), e salvar para PPTX quando feito:

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.ICell;
import org.aspose.slides.foss.IParagraphCollection;
import org.aspose.slides.foss.IPortionFormat;
import org.aspose.slides.foss.NullableBool;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

try (Presentation prs = new Presentation()) {
    ISlideCollection slides = prs.getSlides();
    ISlide slide = slides.get(0);
    // ... add table ...
    prs.save("table.pptx", SaveFormat.PPTX);
}

Passo 3: Defina largura de coluna e altura das linhas

As tabelas exigem largura explícita de colunas e alturas de linhas em pontos (1 ponto = 1/72 polegada). Um slide padrão tem 720 pontos de largurade e 540 pontosde altura.

double[] colWidths = {200.0, 150.0, 150.0};   // 3 columns
double[] rowHeights = {45.0, 40.0, 40.0};     // 3 rows

Passo 4: Adicionar a tabela

slide.getShapes().addTable(x, y, colWidths, rowHeights) Cria a tabela na posição (x, y):

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.ICell;
import org.aspose.slides.foss.IParagraphCollection;
import org.aspose.slides.foss.IPortionFormat;
import org.aspose.slides.foss.NullableBool;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

try (Presentation prs = new Presentation()) {
    ISlideCollection slides = prs.getSlides();
    ISlide slide = slides.get(0);

    double[] colWidths = {200.0, 150.0, 150.0};
    double[] rowHeights = {45.0, 40.0, 40.0};
    ITable table = slide.getShapes().addTable(50, 100, colWidths, rowHeights);

    prs.save("table.pptx", SaveFormat.PPTX);
}

Passo 5: Configurar texto de célula

Células de acesso via table.getRows().get(rowIndex).get(colIndex) e atribuir texto através de: .getTextFrame().setText().Os índices de linha e coluna são baseados em zero, portanto a linha do cabeçalho é o índice 0 e as linhas de dados começam no índize 1:

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.ICell;
import org.aspose.slides.foss.IParagraphCollection;
import org.aspose.slides.foss.IPortionFormat;
import org.aspose.slides.foss.NullableBool;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

try (Presentation prs = new Presentation()) {
    ISlideCollection slides = prs.getSlides();
    ISlide slide = slides.get(0);

    double[] colWidths = {200.0, 150.0, 150.0};
    double[] rowHeights = {45.0, 40.0, 40.0};
    ITable table = slide.getShapes().addTable(50, 100, colWidths, rowHeights);

    // Header row (row 0)
    String[] headers = {"Product", "Units Sold", "Revenue"};
    for (int col = 0; col < headers.length; col++) {
        table.getRows().get(0).get(col).getTextFrame().setText(headers[col]);
    }

    // Data rows
    String[][] data = {
        {"Widget A", "1,200", "$24,000"},
        {"Widget B", "850", "$17,000"},
    };
    for (int row = 0; row < data.length; row++) {
        for (int col = 0; col < data[row].length; col++) {
            table.getRows().get(row + 1).get(col)
                .getTextFrame().setText(data[row][col]);
        }
    }

    prs.save("sales-table.pptx", SaveFormat.PPTX);
}

Passo 6: Formatear texto da célula de cabeçalho

Aplicar o formato de fonte em negrito para células do cabeçalho acessando a primeira seção da página. IPortionFormat via: cell.getTextFrame().getParagraphs().get(0).getPortions().get(0).getPortionFormat() e chamando-me. fmt.setFontBold(NullableBool.TRUE):

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.ICell;
import org.aspose.slides.foss.IParagraphCollection;
import org.aspose.slides.foss.IPortionFormat;
import org.aspose.slides.foss.NullableBool;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

for (int col = 0; col < headers.length; col++) {
    ICell cell = table.getRows().get(0).get(col);
    IParagraphCollection paragraphs = cell.getTextFrame().getParagraphs();
    if (paragraphs.size() > 0 && paragraphs.get(0).getPortions().size() > 0) {
        IPortionFormat fmt = paragraphs.get(0).getPortions().get(0)
            .getPortionFormat();
        fmt.setFontBold(NullableBool.TRUE);
        fmt.getFillFormat().setFillType(FillType.SOLID);
        fmt.getFillFormat().getSolidFillColor().setColor(
            Color.fromArgb(255, 255, 255, 255)
        );
    }
}

Exemplo de trabalho completo

O seguinte programa autônomo cria uma tabela de receitas regionais com uma linha de cabeçalho em negrito, preenche quatro linhas de dados e salva o resultado como um arquivo PPTX:

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.ICell;
import org.aspose.slides.foss.IParagraphCollection;
import org.aspose.slides.foss.IPortionFormat;
import org.aspose.slides.foss.NullableBool;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

public class CreateTable {
    public static void main(String[] args) {
        String[][] dataRows = {
            {"North", "$1.2M", "+8%"},
            {"South", "$0.9M", "+4%"},
            {"East",  "$1.5M", "+12%"},
            {"West",  "$0.7M", "+2%"},
        };
        String[] headers = {"Region", "Revenue", "Growth"};

        try (Presentation prs = new Presentation()) {
            ISlideCollection slides = prs.getSlides();
            ISlide slide = slides.get(0);

            double[] colWidths = {180.0, 140.0, 120.0};
            double[] rowHeights = new double[dataRows.length + 1];
            rowHeights[0] = 45.0;
            for (int i = 1; i < rowHeights.length; i++) {
                rowHeights[i] = 38.0;
            }

            ITable table = slide.getShapes().addTable(
                60, 80, colWidths, rowHeights
            );

            // Header row
            for (int col = 0; col < headers.length; col++) {
                ICell cell = table.getRows().get(0).get(col);
                cell.getTextFrame().setText(headers[col]);
                if (cell.getTextFrame().getParagraphs().size() > 0
                    && cell.getTextFrame().getParagraphs().get(0)
                        .getPortions().size() > 0) {
                    cell.getTextFrame().getParagraphs().get(0)
                        .getPortions().get(0).getPortionFormat()
                        .setFontBold(NullableBool.TRUE);
                }
            }

            // Data rows
            for (int row = 0; row < dataRows.length; row++) {
                for (int col = 0; col < dataRows[row].length; col++) {
                    table.getRows().get(row + 1).get(col)
                        .getTextFrame().setText(dataRows[row][col]);
                }
            }

            prs.save("regional-revenue.pptx", SaveFormat.PPTX);
        }
        System.out.println("Saved regional-revenue.pptx");
    }
}

Problemas comuns e soluções

IndexOutOfBoundsException quando acederem table.getRows().get(row).get(col)

Os índices de linha e coluna são baseados em zero. Se você definir rowHeights com 3 elementos, os índices de linha válidos são 0, 1, 2.

Não há texto na célula no arquivo de armazenamento .

Sempre atribuir através de .getTextFrame().setText(value).Celas de acesso como: table.getRows().get(rowIndex).get(colIndex).getTextFrame().setText("value").

A posição da mesa está fora do slide.

Verifica isso . x + sum(colWidths) <= 720 e a) y + sum(rowHeights) <= 540 para um slide padrão.


Perguntas Frequentes

Posso juntar células de mesa?

Fusão de células (mergeCells) é declarado na API, mas aumenta a taxa de emissão. UnsupportedOperationException nesta edição.

Posso aplicar uma cor de fundo para toda a mesa?

Aplicar a formatação de preenchimento para cada célula individual:

for (int row = 0; row < table.getRows().size(); row++) {
    for (int col = 0; col < table.getColumns().size(); col++) {
        ICell cell = table.getRows().get(row).get(col);
        cell.getCellFormat().getFillFormat().setFillType(FillType.SOLID);
        cell.getCellFormat().getFillFormat().getSolidFillColor().setColor(
            Color.fromArgb(255, 240, 248, 255)
        );
    }
}

Posso definir um estilo de mesa?

Sim, usa. table.setStylePreset(TableStylePreset.MEDIUM_STYLE_2_ACCENT_1) Aplicar um estilo de mesa integrado.


Ver também:

 Português