Ich habe eine Menge Daten, die ich von einer Website in eine PowerPoint-Präsentation exportieren muss und Open XML SDK 2.0 verwendet habe diese Aufgabe. Ich habe eine PowerPoint-Präsentation, die ich über das Open XML SDK 2.0 Productivity Tool durchführe, um den Vorlagencode zu generieren, mit dem ich den Export neu erstellen kann.Wie Sie die Tabelle in eine neue PowerPoint-Folie teilen, wenn der Inhalt aus der aktuellen Folie mit Open XML SDK 2.0 fließt
Auf einer dieser Folien habe ich eine Tabelle und die Anforderung besteht darin, Daten zu dieser Tabelle hinzuzufügen und diese Tabelle über mehrere Folien hinweg zu brechen, wenn die Tabelle den unteren Rand der Folie überschreitet. Der Ansatz, den ich gewählt habe, besteht darin, die Höhe der Tabelle zu bestimmen, und wenn sie die Höhe der Folie überschreitet, verschiebe diesen neuen Inhalt auf die nächste Folie. Ich habe gelesen Bryan and Jones Blog zum Hinzufügen von wiederholten Daten zu einer PowerPoint-Folie, aber mein Szenario ist ein wenig anders. Sie verwenden den folgenden Code:
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++;
Das wird für mich nicht funktionieren, da sie wissen, was die Höhe der Tabellenzeile zu setzen, da sie die Höhe des Bildes sein wird, aber beim Hinzufügen in unterschiedlichen Mengen an Text I Ich kenne die Höhe nicht im Voraus, also setze ich tr.Height
auf einen Standardwert. Hier ist mein Versuch an der Tischhöhe bei Bezifferung:
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);
Hier ist die Hilfsmethoden:
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;
}
Dies fügt korrekt die neue Tabellenzeile zu der vorhandenen Tabelle, aber wenn ich versuche und erhalte die Höhe des Tisches, gibt es die ursprüngliche Höhe und nicht die neue Höhe zurück. Die neue Höhe bedeutet die Standardhöhe, die ich ursprünglich festgelegt habe, und nicht die Höhe, nachdem eine große Menge Text eingefügt wurde. Es scheint, dass die Höhe nur neu justiert wird, wenn sie in PowerPoint geöffnet wird.
Ich habe auch versucht, auf die Höhe der größten Tabellenzelle in der Zeile zuzugreifen, aber kann nicht die richtige Eigenschaft finden, um diese Aufgabe auszuführen.
Meine Frage ist, wie bestimmen Sie die Höhe einer dynamisch hinzugefügten Tabellenzeile, da es scheint, die Höhe der Zeile zu aktualisieren, bis es in PowerPoint geöffnet wird? Gibt es andere Möglichkeiten, um festzulegen, wann der Inhalt bei Verwendung von Open XML SDK 2.0 auf eine andere Folie aufgeteilt werden soll? Ich bin offen für jeden Vorschlag zu einem besseren Ansatz, den jemand gemacht haben könnte, da es zu diesem Thema nicht viel Dokumentation gibt.
Ja, ich meine, dies der Weg war ich nach unten ging, aber hatte kein Glück. Suchen Sie mehr nach einem funktionierenden Beispiel mit Code. – amurra
@Otaku: Ich habe nie eine Lösung für dieses Problem gefunden und da die Zeit ein Problem bei meinem Projekt war, haben wir uns entschieden, die Daten einfach von der Folie fließen zu lassen und den Endbenutzer die Daten neu formatieren zu lassen. – amurra