Cómo trabajar con tablas en Java
Aspose.Slides FOSS for Java admite la creación de tablas en diapositivas con anchos de columna y alturas de fila configurables. Esta guía muestra cómo agregar una tabla, rellenarla con datos y aplicar formato de texto básico a las celdas.
Guía paso a paso
Paso 1: Añadir la dependencia de Maven
<dependency>
<groupId>org.aspose.slides.foss</groupId>
<artifactId>aspose-slides-foss</artifactId>
<version>1.0.0</version>
</dependency>Paso 2: Crear o abrir una presentación
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()) {
ISlide slide = prs.getSlides().get(0);
// ... add table ...
prs.save("table.pptx", SaveFormat.PPTX);
}Paso 3: Definir anchos de columna y alturas de fila
Las tablas requieren anchos de columna y alturas de fila explícitos en puntos (1 punto = 1/72 de pulgada). Una diapositiva estándar tiene 720 puntos de ancho y 540 puntos de alto.
double[] colWidths = {200.0, 150.0, 150.0}; // 3 columns
double[] rowHeights = {45.0, 40.0, 40.0}; // 3 rowsPaso 4: Añadir la tabla
slide.getShapes().addTable(x, y, colWidths, rowHeights) crea la tabla en la posición (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()) {
ISlide slide = prs.getSlides().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);
}Paso 5: Establecer texto de celda
Acceda a las celdas mediante table.getRows().get(rowIndex).get(colIndex) y asigne texto a través de .getTextFrame().setText():
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()) {
ISlide slide = prs.getSlides().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);
}Paso 6: Formatear texto de la celda de encabezado
Aplicar formato en negrita a las celdas de encabezado usando PortionFormat:
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)
);
}
}Ejemplo completo y funcional
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()) {
ISlide slide = prs.getSlides().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 comunes y soluciones
IndexOutOfBoundsException al acceder table.getRows().get(row).get(col)
Los índices de fila y columna comienzan en cero. Si definiste rowHeights con 3 elementos, los índices de fila válidos son 0, 1, 2.
El texto de la celda no aparece en el archivo guardado
Siempre asignar a través de .getTextFrame().setText(value). Acceder a las celdas como table.getRows().get(rowIndex).get(colIndex).getTextFrame().setText("value").
La posición de la tabla está fuera de la diapositiva
Compruebe que x + sum(colWidths) <= 720 y y + sum(rowHeights) <= 540 para una diapositiva estándar.
Preguntas Frecuentes
¿Puedo combinar celdas de tabla?
La fusión de celdas (mergeCells) está declarada en la API pero genera UnsupportedOperationException en esta edición.
¿Puedo aplicar un color de fondo a toda la tabla?
Aplicar formato de relleno a cada celda 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.getFillFormat().setFillType(FillType.SOLID);
cell.getFillFormat().getSolidFillColor().setColor(
Color.fromArgb(255, 240, 248, 255)
);
}
}¿Puedo establecer un preset de estilo de tabla?
Sí. Use table.setStylePreset(TableStylePreset.MEDIUM_STYLE_2_ACCENT_1) para aplicar un estilo de tabla incorporado.