Tengo un montón de datos que necesito exportar de un sitio web a una presentación de PowerPoint y he usado Open XML SDK 2.0 para realizar esta tarea. Tengo una presentación de PowerPoint que estoy poniendo a través de Open XML SDK 2.0 Productivity Tool para generar el código de plantilla que puedo usar para recrear la exportación.Cómo dividir la tabla en una nueva diapositiva de PowerPoint cuando el contenido fluye fuera de la diapositiva actual usando Open XML SDK 2.0
En una de esas diapositivas tengo una tabla y el requisito es agregar datos a esa tabla y dividir esa tabla en varias diapositivas si la tabla excede la parte inferior de la diapositiva. El enfoque que he tomado es determinar la altura de la tabla y si excede la altura de la diapositiva, mueva ese nuevo contenido a la siguiente diapositiva. He leído el blog Bryan and Jones al agregar datos repetidos a una diapositiva de PowerPoint, pero mi escenario es un poco diferente. Utilizan el siguiente código:
A.Table tbl = current.Slide.Descendants<A.Table>().First();
A.TableRow tr = new A.TableRow();
tr.Height = heightInEmu;
tr.Append(CreateDrawingCell(imageRel + imageRelId));
tr.Append(CreateTextCell(category));
tr.Append(CreateTextCell(subcategory));
tr.Append(CreateTextCell(model));
tr.Append(CreateTextCell(price.ToString()));
tbl.Append(tr);
imageRelId++;
Esto no funcionará para mí, ya que saben qué altura para ajustar la fila de la tabla a, ya que será la altura de la imagen, pero cuando se añaden en diferentes cantidades de texto I no sé la altura antes de tiempo, así que simplemente configuré tr.Height
en un valor predeterminado. Aquí está mi intento de averiguar la altura de la mesa:
A.Table tbl = tableSlide.Slide.Descendants<A.Table>().First();
A.TableRow tr = new A.TableRow();
tr.Height = 370840L;
tr.Append(PowerPointUtilities.CreateTextCell("This");
tr.Append(PowerPointUtilities.CreateTextCell("is"));
tr.Append(PowerPointUtilities.CreateTextCell("a"));
tr.Append(PowerPointUtilities.CreateTextCell("test"));
tr.Append(PowerPointUtilities.CreateTextCell("Test"));
tbl.Append(tr);
tableSlide.Slide.Save();
long tableHeight = PowerPointUtilities.TableHeight(tbl);
Aquí están los métodos de ayuda:
public static A.TableCell CreateTextCell(string text)
{
A.TableCell tableCell = new A.TableCell(
new A.TextBody(new A.BodyProperties(),
new A.Paragraph(new A.Run(new A.Text(text)))),
new A.TableCellProperties());
return tableCell;
}
public static Int64Value TableHeight(A.Table table)
{
long height = 0;
foreach (var row in table.Descendants<A.TableRow>()
.Where(h => h.Height.HasValue))
{
height += row.Height.Value;
}
return height;
}
Esto agrega correctamente la nueva fila de la tabla a la tabla existente, pero cuando intento y obtener el altura de la mesa, devuelve la altura original y no la nueva altura. La nueva altura significa la altura predeterminada que configuré inicialmente y no la altura después de haber insertado una gran cantidad de texto. Parece que la altura solo se reajusta cuando se abre en PowerPoint.
También he intentado acceder a la altura de la celda de tabla más grande de la fila, pero parece que no puedo encontrar la propiedad adecuada para realizar esa tarea.
Mi pregunta es ¿cómo se determina la altura de una fila de tabla añadida dinámicamente ya que no parece actualizar la altura de la fila hasta que se abre en PowerPoint? ¿Alguna otra forma de determinar cuándo dividir el contenido en otra diapositiva mientras usa Open XML SDK 2.0? Estoy abierto a cualquier sugerencia sobre un mejor enfoque que alguien haya tomado ya que no hay mucha documentación sobre este tema.
Sí, me refiero a esto fue el camino que iba hacia abajo, pero no tuvo suerte. Buscando más por un ejemplo de trabajo con código. – amurra
@Otaku: Nunca encontré una solución a este problema y dado que el tiempo era un problema en mi proyecto, decidimos simplemente dejar que los datos fluyeran de la diapositiva y hacer que el usuario final volviera a formatear los datos. – amurra