Gestionar Tabla

Una tabla en PowerPoint es una manera eficiente de mostrar y retratar información. La información en una cuadrícula de celdas (dispuestas en filas y columnas) es sencilla y fácil de entender.

Aspose.Slides proporciona la clase Table, la interfaz ITable, la clase Cell, la interfaz ICell y otros tipos para permitirte crear, actualizar y gestionar tablas en todo tipo de presentaciones.

Crear Tabla desde Cero

  1. Crea una instancia de la clase Presentation.
  2. Obtén una referencia a la diapositiva a través de su índice.
  3. Define un arreglo de columnWidth.
  4. Define un arreglo de rowHeight.
  5. Agrega un objeto ITable a la diapositiva a través del método addTable.
  6. Itera a través de cada ICell para aplicar formato a los bordes superior, inferior, derecho e izquierdo.
  7. Fusiona las dos primeras celdas de la primera fila de la tabla.
  8. Accede al TextFrame de un ICell.
  9. Agrega algún texto al TextFrame.
  10. Guarda la presentación modificada.

Este código Java muestra cómo crear una tabla en una presentación:

// Instancia una clase Presentation que representa un archivo PPTX
Presentation pres = new Presentation();
try {
    // Accede a la primera diapositiva
    ISlide sld = pres.getSlides().get_Item(0);

    // Define columnas con anchos y filas con alturas
    double[] dblCols = {50, 50, 50};
    double[] dblRows = {50, 30, 30, 30, 30};

    // Agrega una forma de tabla a la diapositiva
    ITable tbl = sld.getShapes().addTable(100, 50, dblCols, dblRows);

    // Establece el formato del borde para cada celda
    for (int row = 0; row < tbl.getRows().size(); row++)
    {
        for (int cell = 0; cell < tbl.getRows().get_Item(row).size(); cell++)
        {
            ICellFormat cellFormat = tbl.getRows().get_Item(row).get_Item(cell).getCellFormat();
            
            cellFormat.getBorderTop().getFillFormat().setFillType(FillType.Solid);
            cellFormat.getBorderTop().getFillFormat().getSolidFillColor().setColor(Color.RED);
            cellFormat.getBorderTop().setWidth(5);

            cellFormat.getBorderBottom().getFillFormat().setFillType(FillType.Solid);
            cellFormat.getBorderBottom().getFillFormat().getSolidFillColor().setColor(Color.RED);
            cellFormat.getBorderBottom().setWidth(5);

            cellFormat.getBorderLeft().getFillFormat().setFillType(FillType.Solid);
            cellFormat.getBorderLeft().getFillFormat().getSolidFillColor().setColor(Color.RED);
            cellFormat.getBorderLeft().setWidth(5);

            cellFormat.getBorderRight().getFillFormat().setFillType(FillType.Solid);
            cellFormat.getBorderRight().getFillFormat().getSolidFillColor().setColor(Color.RED);
            cellFormat.getBorderRight().setWidth(5);
        }
    }
    // Fusiona las celdas 1 y 2 de la fila 1
    tbl.mergeCells(tbl.getRows().get_Item(0).get_Item(0), tbl.getRows().get_Item(1).get_Item(1), false);

    // Agrega algo de texto a la celda fusionada
    tbl.getRows().get_Item(0).get_Item(0).getTextFrame().setText("Celdas Fusionadas");

    // Guarda la presentación en el disco
    pres.save("table.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Numeración en Tabla Estándar

En una tabla estándar, la numeración de celdas es sencilla y basada en cero. La primera celda en una tabla se indexa como 0,0 (columna 0, fila 0).

Por ejemplo, las celdas en una tabla con 4 columnas y 4 filas se numeran de esta manera:

(0, 0) (1, 0) (2, 0) (3, 0)
(0, 1) (1, 1) (2, 1) (3, 1)
(0, 2) (1, 2) (2, 2) (3, 2)
(0, 3) (1, 3) (2, 3) (3, 3)

Este código Java muestra cómo especificar la numeración para celdas en una tabla:

// Instancia una clase Presentation que representa un archivo PPTX
Presentation pres = new Presentation();
try {
    // Accede a la primera diapositiva
    ISlide sld = pres.getSlides().get_Item(0);

    // Define columnas con anchos y filas con alturas
    double[] dblCols = { 70, 70, 70, 70 };
    double[] dblRows = { 70, 70, 70, 70 };

    // Agrega una forma de tabla a la diapositiva
    ITable tbl = sld.getShapes().addTable(100, 50, dblCols, dblRows);

    // Establece el formato del borde para cada celda
    for (IRow row : tbl.getRows())
    {
        for (ICell cell : row)
        {
            cell.getCellFormat().getBorderTop().getFillFormat().setFillType(FillType.Solid);
            cell.getCellFormat().getBorderTop().getFillFormat().getSolidFillColor().setColor(Color.RED);
            cell.getCellFormat().getBorderTop().setWidth(5);

            cell.getCellFormat().getBorderBottom().getFillFormat().setFillType(FillType.Solid);
            cell.getCellFormat().getBorderBottom().getFillFormat().getSolidFillColor().setColor(Color.RED);
            cell.getCellFormat().getBorderBottom().setWidth(5);

            cell.getCellFormat().getBorderLeft().getFillFormat().setFillType(FillType.Solid);
            cell.getCellFormat().getBorderLeft().getFillFormat().getSolidFillColor().setColor(Color.RED);
            cell.getCellFormat().getBorderLeft().setWidth(5);

            cell.getCellFormat().getBorderRight().getFillFormat().setFillType(FillType.Solid);
            cell.getCellFormat().getBorderRight().getFillFormat().getSolidFillColor().setColor(Color.RED);
            cell.getCellFormat().getBorderRight().setWidth(5);
        }
    }

    // Guarda la presentación en el disco
    pres.save("StandardTables_out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Acceder a Tabla Existente

  1. Crea una instancia de la clase Presentation.

  2. Obtén una referencia a la diapositiva que contiene la tabla a través de su índice.

  3. Crea un objeto ITable y configúralo como nulo.

  4. Itera a través de todos los objetos IShape hasta que se encuentre la tabla.

    Si sospechas que la diapositiva con la que estás tratando contiene una sola tabla, puedes simplemente verificar todas las formas que contiene. Cuando una forma se identifica como tabla, puedes convertirla en un objeto Table. Pero si la diapositiva con la que estás trabajando contiene varias tablas, es mejor buscar la tabla que necesitas a través de su setAlternativeText(String value).

  5. Usa el objeto ITable para trabajar con la tabla. En el ejemplo a continuación, agregamos una nueva fila a la tabla.

  6. Guarda la presentación modificada.

Este código Java muestra cómo acceder y trabajar con una tabla existente:

// Instancia la clase Presentation que representa un archivo PPTX
Presentation pres = new Presentation("UpdateExistingTable.pptx");
try {

    // Accede a la primera diapositiva
    ISlide sld = pres.getSlides().get_Item(0);

    // Inicializa TablaEx nulo
    ITable tbl = null;

    // Itera a través de las formas y establece una referencia a la tabla encontrada
    for (IShape shp : sld.getShapes()) 
    {
        if (shp instanceof ITable) 
        {
            tbl = (ITable) shp;
            // Establece el texto para la primera columna de la segunda fila
            tbl.get_Item(0, 1).getTextFrame().setText("Nuevo");
        }
    }
    
    // Guarda la presentación modificada en el disco
    pres.save("table1_out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Alinear Texto en Tabla

  1. Crea una instancia de la clase Presentation.
  2. Obtén una referencia a la diapositiva a través de su índice.
  3. Agrega un objeto ITable a la diapositiva.
  4. Accede a un objeto ITextFrame desde la tabla.
  5. Accede al ITextFrame IParagraph.
  6. Alinea el texto verticalmente.
  7. Guarda la presentación modificada.

Este código Java muestra cómo alinear el texto en una tabla:

// Crea una instancia de la clase Presentation
Presentation pres = new Presentation();
try {
    // Obtiene la primera diapositiva 
    ISlide slide = pres.getSlides().get_Item(0);
    
    // Define columnas con anchos y filas con alturas
    double[] dblCols = { 120, 120, 120, 120 };
    double[] dblRows = { 100, 100, 100, 100 };
    
    // Agrega la forma de tabla a la diapositiva
    ITable tbl = slide.getShapes().addTable(100, 50, dblCols, dblRows);
    tbl.get_Item(1, 0).getTextFrame().setText("10");
    tbl.get_Item(2, 0).getTextFrame().setText("20");
    tbl.get_Item(3, 0).getTextFrame().setText("30");
    
    // Accede al marco de texto
    ITextFrame txtFrame = tbl.get_Item(0, 0).getTextFrame();
    
    // Crea el objeto Paragraph para el marco de texto
    IParagraph paragraph = txtFrame.getParagraphs().get_Item(0);
    
    // Crea el objeto Portion para el párrafo
    IPortion portion = paragraph.getPortions().get_Item(0);
    portion.setText("Texto aquí");
    portion.getPortionFormat().getFillFormat().setFillType(FillType.Solid);
    portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
    
    // Alinea el texto verticalmente
    ICell cell = tbl.get_Item(0, 0);
    cell.setTextAnchorType(TextAnchorType.Center);
    cell.setTextVerticalType(TextVerticalType.Vertical270);
    
    // Guarda la presentación en el disco
    pres.save("Vertical_Align_Text_out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Establecer Formato de Texto a Nivel de Tabla

  1. Crea una instancia de la clase Presentation.
  2. Obtén una referencia a la diapositiva a través de su índice.
  3. Accede a un objeto ITable de la diapositiva.
  4. Establece el setFontHeight(float value) para el texto.
  5. Establece el setAlignment(int value) y setMarginRight(float value).
  6. Establece el setTextVerticalType(byte value).
  7. Guarda la presentación modificada.

Este código Java muestra cómo aplicar tus opciones de formato preferidas al texto en una tabla:

// Crea una instancia de la clase Presentation
Presentation pres = new Presentation("simpletable.pptx");
try {
    // Supongamos que la primera forma en la primera diapositiva es una tabla
    ITable someTable = (ITable) pres.getSlides().get_Item(0).getShapes().get_Item(0);
    
    // Establece la altura de fuente de las celdas de la tabla
    PortionFormat portionFormat = new PortionFormat();
    portionFormat.setFontHeight(25);
    someTable.setTextFormat(portionFormat);
    
    // Establece la alineación del texto de las celdas de la tabla y el margen derecho en una sola llamada
    ParagraphFormat paragraphFormat = new ParagraphFormat();
    paragraphFormat.setAlignment(TextAlignment.Right);
    paragraphFormat.setMarginRight(20);
    someTable.setTextFormat(paragraphFormat);
    
    // Establece el tipo de texto vertical de las celdas de la tabla
    TextFrameFormat textFrameFormat = new TextFrameFormat();
    textFrameFormat.setTextVerticalType(TextVerticalType.Vertical);
    someTable.setTextFormat(textFrameFormat);
    
    pres.save("result.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Obtener Propiedades de Estilo de Tabla

Aspose.Slides permite recuperar las propiedades de estilo para una tabla para que puedas utilizar esos detalles para otra tabla o en otro lugar. Este código Java muestra cómo obtener las propiedades de estilo de un estilo de tabla preestablecido:

Presentation pres = new Presentation();
try {
    ITable table = pres.getSlides().get_Item(0).getShapes().addTable(10, 10, new double[] { 100, 150 }, new double[] { 5, 5, 5 });
    table.setStylePreset(TableStylePreset.DarkStyle1); // cambia el estilo preestablecido predeterminado 
    pres.save("table.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Bloquear Relación de Aspecto de la Tabla

La relación de aspecto de una forma geométrica es la relación de sus tamaños en diferentes dimensiones. Aspose.Slides proporciona la propiedad setAspectRatioLocked para permitirte bloquear la configuración de relación de aspecto para tablas y otras formas.

Este código Java muestra cómo bloquear la relación de aspecto para una tabla:

Presentation pres = new Presentation("pres.pptx");
try {
    ITable table = (ITable)pres.getSlides().get_Item(0).getShapes().get_Item(0);
    System.out.println("Relación de aspecto bloqueada: " + table.getGraphicalObjectLock().getAspectRatioLocked());

    table.getGraphicalObjectLock().setAspectRatioLocked(!table.getGraphicalObjectLock().getAspectRatioLocked()); // invertir

    System.out.println("Relación de aspecto bloqueada: " + table.getGraphicalObjectLock().getAspectRatioLocked());

    pres.save("pres-out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}