Administrar tablas de presentación en .NET
Introducción
Una tabla en PowerPoint es una forma eficiente de mostrar y representar información. La información en una cuadrícula de celdas (organizadas en filas y columnas) es directa y fácil de entender.
Aspose.Slides proporciona la clase Table, la interfaz ITable, la clase Cell, la interfaz ICell y otros tipos que le permiten crear, actualizar y gestionar tablas en todo tipo de presentaciones.
Crear una tabla desde cero
- Cree una instancia de la clase Presentation .
- Obtenga la referencia de una diapositiva mediante su índice.
- Defina una matriz de
columnWidth. - Defina una matriz de
rowHeight. - Añada un objeto ITable a la diapositiva mediante el método AddTable .
- Itere a través de cada ICell para aplicar formato a los bordes superior, inferior, derecho e izquierdo.
- Combine las dos primeras celdas de la primera fila de la tabla.
- Acceda al TextFrame de un ICell .
- Añada texto al TextFrame .
- Guarde la presentación modificada.
Este código C# le muestra cómo crear una tabla en una presentación:
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
// Instancia una clase Presentation que representa un archivo PPTX
Presentation pres = new Presentation();
// Accede a la primera diapositiva
ISlide sld = pres.Slides[0];
// Define columnas con anchuras y filas con alturas
double[] dblCols = { 50, 50, 50 };
double[] dblRows = { 50, 30, 30, 30, 30 };
// Añade una forma de tabla a la diapositiva
ITable tbl = sld.Shapes.AddTable(100, 50, dblCols, dblRows);
// Establece el formato de borde para cada celda
for (int row = 0; row < tbl.Rows.Count; row++)
{
for (int cell = 0; cell < tbl.Rows[row].Count; cell++)
{
tbl.Rows[row][cell].CellFormat.BorderTop.FillFormat.FillType = FillType.Solid;
tbl.Rows[row][cell].CellFormat.BorderTop.FillFormat.SolidFillColor.Color = Color.Red;
tbl.Rows[row][cell].CellFormat.BorderTop.Width = 5;
tbl.Rows[row][cell].CellFormat.BorderBottom.FillFormat.FillType = (FillType.Solid);
tbl.Rows[row][cell].CellFormat.BorderBottom.FillFormat.SolidFillColor.Color= Color.Red;
tbl.Rows[row][cell].CellFormat.BorderBottom.Width =5;
tbl.Rows[row][cell].CellFormat.BorderLeft.FillFormat.FillType = FillType.Solid;
tbl.Rows[row][cell].CellFormat.BorderLeft.FillFormat.SolidFillColor.Color =Color.Red;
tbl.Rows[row][cell].CellFormat.BorderLeft.Width = 5;
tbl.Rows[row][cell].CellFormat.BorderRight.FillFormat.FillType = FillType.Solid;
tbl.Rows[row][cell].CellFormat.BorderRight.FillFormat.SolidFillColor.Color = Color.Red;
tbl.Rows[row][cell].CellFormat.BorderRight.Width = 5;
}
}
// Combina las celdas 1 y 2 de la fila 1
tbl.MergeCells(tbl.Rows[0][0], tbl.Rows[0][1], false);
// Añade texto a la celda combinada
tbl.Rows[0][0].TextFrame.Text = "Merged Cells";
// Guarda la presentación en disco
pres.Save("table.pptx", SaveFormat.Pptx);
Numeración en una tabla estándar
En una tabla estándar, la numeración de las celdas es sencilla y comienza en cero. La primera celda de una tabla tiene el índice 0,0 (columna 0, fila 0).
Por ejemplo, las celdas de una tabla con 4 columnas y 4 filas se numeran de la siguiente 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 C# crea la tabla estándar 4 × 4 numerada arriba y establece el formato de borde para cada una de sus celdas:
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
// Instancia una clase Presentation que representa un archivo PPTX
using (Presentation pres = new Presentation())
{
// Accede a la primera diapositiva
ISlide sld = pres.Slides[0];
// Define columnas con anchuras y filas con alturas
double[] dblCols = { 70, 70, 70, 70 };
double[] dblRows = { 70, 70, 70, 70 };
// Añade una forma de tabla a la diapositiva
ITable tbl = sld.Shapes.AddTable(100, 50, dblCols, dblRows);
// Establece el formato de borde para cada celda
foreach (IRow row in tbl.Rows)
{
foreach (ICell cell in row)
{
cell.CellFormat.BorderTop.FillFormat.FillType = FillType.Solid;
cell.CellFormat.BorderTop.FillFormat.SolidFillColor.Color = Color.Red;
cell.CellFormat.BorderTop.Width = 5;
cell.CellFormat.BorderBottom.FillFormat.FillType = FillType.Solid;
cell.CellFormat.BorderBottom.FillFormat.SolidFillColor.Color = Color.Red;
cell.CellFormat.BorderBottom.Width = 5;
cell.CellFormat.BorderLeft.FillFormat.FillType = FillType.Solid;
cell.CellFormat.BorderLeft.FillFormat.SolidFillColor.Color = Color.Red;
cell.CellFormat.BorderLeft.Width = 5;
cell.CellFormat.BorderRight.FillFormat.FillType = FillType.Solid;
cell.CellFormat.BorderRight.FillFormat.SolidFillColor.Color = Color.Red;
cell.CellFormat.BorderRight.Width = 5;
}
}
// Guarda la presentación en disco
pres.Save("StandardTables_out.pptx", SaveFormat.Pptx);
}
Acceder a una tabla existente
-
Cree una instancia de la clase Presentation .
-
Obtenga una referencia a la diapositiva que contiene la tabla mediante su índice.
-
Cree un objeto ITable y establézcalo en null.
-
Itere a través de todos los objetos IShape hasta encontrar la tabla.
Si sospecha que la diapositiva con la que está trabajando contiene una única tabla, puede simplemente comprobar todas las formas que contiene. Cuando una forma se identifica como tabla, puede convertirla a un objeto Table. Pero si la diapositiva contiene varias tablas, es mejor buscar la tabla que necesita a través de su AlternativeText.
-
Utilice el objeto ITable para trabajar con la tabla. En el ejemplo siguiente añadimos una nueva fila a la tabla.
-
Guarde la presentación modificada.
Este código C# le muestra cómo acceder y trabajar con una tabla existente:
using Aspose.Slides;
// Instancia una clase Presentation que representa un archivo PPTX
using (Presentation pres = new Presentation("UpdateExistingTable.pptx"))
{
// Accede a la primera diapositiva
ISlide sld = pres.Slides[0];
// Inicializa TableEx como null
ITable tbl = null;
// Itera a través de las formas y establece una referencia a la tabla encontrada
foreach (IShape shp in sld.Shapes)
if (shp is ITable)
tbl = (ITable)shp;
// Establece el texto para la primera columna de la segunda fila
tbl[0, 1].TextFrame.Text = "New";
// Guarda la presentación modificada en disco
pres.Save("table1_out.pptx", Aspose.Slides.Export.SaveFormat.Pptx);
}
Encontrar la celda que posee un marco de texto
Cuando el código genérico de procesamiento de texto recibe un ITextFrame de una tabla, use la propiedad ITextFrame.ParentCell para obtener la ICell propietaria. Para un marco de texto de celda de tabla, ITextFrame.ParentCell está definido y ITextFrame.ParentShape es null, aunque la tabla en sí es una forma.
Las coordenadas de la celda están disponibles a través de las propiedades de solo lectura ICell.FirstColumnIndex y ICell.FirstRowIndex. ITextFrame.ParentCell también es de solo lectura: proporciona una navegación al propietario pero no cambia la propiedad. Siempre compruebe que la celda devuelta no sea null antes de usarla.
Para un ejemplo completo que identifica propietarios de celdas y de formas, incluidas las formas asociadas a nodos de SmartArt, vea Search and Replace Text.
Alinear texto en una tabla
- Cree una instancia de la clase Presentation .
- Obtenga la referencia de una diapositiva mediante su índice.
- Añada un objeto ITable a la diapositiva.
- Acceda a un objeto ITextFrame de la tabla.
- Acceda al IParagraph del ITextFrame .
- Alinee el texto verticalmente.
- Guarde la presentación modificada.
Este código C# le muestra cómo alinear el texto en una tabla:
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
// Crea una instancia de la clase Presentation
Presentation presentation = new Presentation();
// Obtiene la primera diapositiva
ISlide slide = presentation.Slides[0];
// Define columnas con anchuras y filas con alturas
double[] dblCols = { 120, 120, 120, 120 };
double[] dblRows = { 100, 100, 100, 100 };
// Añade la forma de tabla a la diapositiva
ITable tbl = slide.Shapes.AddTable(100, 50, dblCols, dblRows);
tbl[1, 0].TextFrame.Text = "10";
tbl[2, 0].TextFrame.Text = "20";
tbl[3, 0].TextFrame.Text = "30";
// Accede al marco de texto
ITextFrame txtFrame = tbl[0, 0].TextFrame;
// Crea el objeto Paragraph para el marco de texto
IParagraph paragraph = txtFrame.Paragraphs[0];
// Crea el objeto Portion para el párrafo
IPortion portion = paragraph.Portions[0];
portion.Text = "Text here";
portion.PortionFormat.FillFormat.FillType = FillType.Solid;
portion.PortionFormat.FillFormat.SolidFillColor.Color = Color.Black;
// Alinea el texto verticalmente
ICell cell = tbl[0, 0];
cell.TextAnchorType = TextAnchorType.Center;
cell.TextVerticalType = TextVerticalType.Vertical270;
// Guarda la presentación en disco
presentation.Save("Vertical_Align_Text_out.pptx", SaveFormat.Pptx);
Establecer formato de texto a nivel de tabla
- Cree una instancia de la clase Presentation .
- Obtenga la referencia de una diapositiva mediante su índice.
- Acceda a un objeto ITable de la diapositiva.
- Establezca la FontHeight para el texto.
- Establezca la Alignment y MarginRight.
- Establezca el TextVerticalType .
- Guarde la presentación modificada.
Este código C# le muestra cómo aplicar sus opciones de formato preferidas al texto en una tabla:
using Aspose.Slides;
// Crea una instancia de la clase Presentation
Presentation presentation = new Presentation();
ISlide slide = presentation.Slides[0];
ITable someTable = presentation.Slides[0].Shapes[0] as ITable; // Supongamos que la primera forma en la primera diapositiva es una tabla
// Establece la altura de fuente de las celdas de la tabla
PortionFormat portionFormat = new PortionFormat();
portionFormat.FontHeight = 25;
someTable.SetTextFormat(portionFormat);
// Establece la alineación de texto y el margen derecho de las celdas de la tabla en una sola llamada
ParagraphFormat paragraphFormat = new ParagraphFormat();
paragraphFormat.Alignment = TextAlignment.Right;
paragraphFormat.MarginRight = 20;
someTable.SetTextFormat(paragraphFormat);
// Establece el tipo de texto vertical de las celdas de la tabla
TextFrameFormat textFrameFormat = new TextFrameFormat();
textFrameFormat.TextVerticalType = TextVerticalType.Vertical;
someTable.SetTextFormat(textFrameFormat);
presentation.Save("result.pptx", Aspose.Slides.Export.SaveFormat.Pptx);
Obtener propiedades de estilo de tabla
Aspose.Slides le permite recuperar las propiedades de estilo de una tabla para que pueda usar esos detalles en otra tabla o en otro lugar. Este código C# le muestra cómo obtener las propiedades de estilo a partir de un estilo predefinido de tabla:
using Aspose.Slides;
using Aspose.Slides.Export;
using (Presentation pres = new Presentation())
{
ITable table = pres.Slides[0].Shapes.AddTable(10, 10, new double[] { 100, 150 }, new double[] { 5, 5, 5 });
table.StylePreset = TableStylePreset.DarkStyle1; // cambiar el tema predeterminado del preset de estilo
// Obtiene el preset de estilo de la tabla.
TableStylePreset stylePreset = table.StylePreset;
Console.WriteLine($"Table style preset: {stylePreset}");
// Aplica el preset de estilo recuperado a otra tabla.
ITable anotherTable = pres.Slides[0].Shapes.AddTable(10, 100, new double[] { 100, 150 }, new double[] { 5, 5, 5 });
anotherTable.StylePreset = stylePreset;
pres.Save("table.pptx", SaveFormat.Pptx);
}
Bloquear la proporción de aspecto de una tabla
La proporción de aspecto de una forma geométrica es la relación entre sus tamaños en distintas dimensiones. Aspose.Slides proporcionó la propiedad AspectRatioLocked para permitirle bloquear la configuración de proporción de aspecto para tablas y otras formas.
Este código C# le muestra cómo bloquear la proporción de aspecto para una tabla:
using Aspose.Slides;
using Aspose.Slides.Export;
using (Presentation pres = new Presentation("pres.pptx"))
{
ITable table = (ITable)pres.Slides[0].Shapes[0];
Console.WriteLine($"Lock aspect ratio set: {table.ShapeLock.AspectRatioLocked}");
table.ShapeLock.AspectRatioLocked = !table.ShapeLock.AspectRatioLocked; // invertir
Console.WriteLine($"Lock aspect ratio set: {table.ShapeLock.AspectRatioLocked}");
pres.Save("pres-out.pptx", SaveFormat.Pptx);
}
Preguntas frecuentes
¿Puedo habilitar la dirección de lectura de derecha a izquierda (RTL) para toda la tabla y el texto de sus celdas?
Sí. La tabla expone una propiedad RightToLeft y los párrafos tienen ParagraphFormat.RightToLeft. Usar ambas garantiza el orden RTL correcto y la representación adecuada dentro de las celdas.
¿Cómo puedo evitar que los usuarios muevan o redimensionen una tabla en el archivo final?
Utilice shape locks para desactivar el movimiento, el redimensionado, la selección, etc. Estas restricciones también se aplican a las tablas.
¿Se admite insertar una imagen dentro de una celda como fondo?
Sí. Puede establecer un picture fill para una celda; la imagen cubrirá el área de la celda según el modo elegido (estirado o mosaico).