Word verfügt über eine lästige Funktion, bei der nach jeder Tabelle ein Absatz eingefügt wird, der Formatierungsinformationen für diese Tabelle enthält.
Wenn Ihre Tabelle am Ende einer Seite steht, kann dieser Absatz am Ende stehen auf der nächsten Seite,
Erstellen einer leeren/leeren Seite.
Ich weiß, dass es eine Problemumgehung dafür gibt, indem man die Schriftart für diesen Absatz auf eine sehr kleine Schriftart einstellt (z. B. 1 Punkt), allerdings kann ich das nur beim Bearbeiten zum Laufen bringen das Dokument über Word, nachdem das Dokument erstellt wurde. Der Versuch, die Schriftgröße dieses Absatzes programmgesteuert mit OpenXML zu ändern, führt nicht zu den erwarteten Ergebnissen.
Die manuelle Problemumgehung ist für meinen Kunden nicht akzeptabel. Gibt es eine Möglichkeit, dies zu beheben?
Hier sind einige Dinge, die ich ausprobiert habe:
1. Löschen des letzten Absatzes:
- Erwartung: Leere Seite würde entfernt
- Realität: Die Datei wurde beschädigt
- Dies ist sinnvoll, da dieser Absatz für die Formatierungsinformationen für die Tabelle benötigt wird.
2 . Ergreift alle RunProperties des letzten Absatzes, entfernt alle Instanzen von FontSize und fügt neue Instanzen von FontSize hinzu.
Code: Select all
OpenXML.Table lastTable = oNewReportDoc.MainDocumentPart.Document.Body
.Descendants()
.Last();
OpenXML.Paragraph paraToEdit = lastTable.NextSibling();
List runProps = paraToEdit.Descendants().ToList();
foreach (RunProperties rp in runProps)
{
rp.RemoveAllChildren();
rp.AddChild(new FontSize() { Val = "1" });
}
Beim Tracing durch den Debugger sieht InnerXML von paraToEdit so aus
vor der Schleife
paraToEdit. InnerXML:
und jetzt
nach der Schleife
paraToEdit.InnerXML:Code: Select all
// Unchanged font size
// Changed font size
Wie Sie sehen können, gibt es hier zwei Instanzen von RunProperties (w:rPr), daher versucht mein nächster Ansatz, die ersten RunProperties innerhalb der ParagraphProperties (w:pPr) zu erfassen
3. (Versuch) Zusätzlich die RunProperties aus den ParagraphProperties zu holen
Code: Select all
OpenXML.Table lastTable = oNewReportDoc.MainDocumentPart.Document.Body
.Descendants()
.Last();
OpenXML.Paragraph paraToEdit = lastTable.NextSibling();
List runProps = paraToEdit.Descendants().ToList();
List
paraProps = paraToEdit.Descendants().ToList();
foreach(ParagraphProperties pp in paraProps)
{
// I also tried using Descendents here, but both return null
RunProperties addRunProps = pp.GetFirstChild();
runProps.Add(addRunProps); // Nothing gets added
}
foreach (RunProperties rp in runProps)
{
rp.RemoveAllChildren();
rp.AddChild(new FontSize() { Val = "1" });
}
Könnte mir jemand eine Anleitung geben, wohin ich von hier aus gehen soll?
Word verfügt über eine lästige Funktion, bei der nach jeder Tabelle ein Absatz eingefügt wird, der Formatierungsinformationen für diese Tabelle enthält.
Wenn Ihre Tabelle am Ende einer Seite steht, kann dieser Absatz am Ende stehen auf der nächsten Seite, [b]Erstellen einer leeren/leeren Seite.[/b]
Ich weiß, dass es eine Problemumgehung dafür gibt, indem man die Schriftart für diesen Absatz auf eine sehr kleine Schriftart einstellt (z. B. 1 Punkt), allerdings kann ich das nur beim Bearbeiten zum Laufen bringen das Dokument über Word, nachdem das Dokument erstellt wurde. Der Versuch, die Schriftgröße dieses Absatzes programmgesteuert mit OpenXML zu ändern, führt nicht zu den erwarteten Ergebnissen.
Die manuelle Problemumgehung ist für meinen Kunden nicht akzeptabel. Gibt es eine Möglichkeit, dies zu beheben?
Hier sind einige Dinge, die ich ausprobiert habe:
[b]1. Löschen des letzten Absatzes:[/b]
[list]
[*]Erwartung: Leere Seite würde entfernt
[*]Realität: Die Datei wurde beschädigt
[*]Dies ist sinnvoll, da dieser Absatz für die Formatierungsinformationen für die Tabelle benötigt wird.
[/list]
[b]2 . Ergreift alle RunProperties des letzten Absatzes, entfernt alle Instanzen von FontSize und fügt neue Instanzen von FontSize hinzu.[/b]
[code]OpenXML.Table lastTable = oNewReportDoc.MainDocumentPart.Document.Body
.Descendants()
.Last();
OpenXML.Paragraph paraToEdit = lastTable.NextSibling();
List runProps = paraToEdit.Descendants().ToList();
foreach (RunProperties rp in runProps)
{
rp.RemoveAllChildren();
rp.AddChild(new FontSize() { Val = "1" });
}
[/code]
Beim Tracing durch den Debugger sieht InnerXML von paraToEdit so aus [b]vor der Schleife[/b]
[b]paraToEdit. InnerXML:[/b]
[code]
// Font Size
// Font Size
[/code]
und jetzt [b]nach der Schleife[/b]
[b]paraToEdit.InnerXML:[/b][code]
// Unchanged font size
// Changed font size
[/code]
Wie Sie sehen können, gibt es hier zwei Instanzen von RunProperties (w:rPr), daher versucht mein nächster Ansatz, die ersten RunProperties innerhalb der ParagraphProperties (w:pPr) zu erfassen
[b]3. (Versuch) Zusätzlich die RunProperties aus den ParagraphProperties zu holen[/b]
[code]OpenXML.Table lastTable = oNewReportDoc.MainDocumentPart.Document.Body
.Descendants()
.Last();
OpenXML.Paragraph paraToEdit = lastTable.NextSibling();
List runProps = paraToEdit.Descendants().ToList();
List
paraProps = paraToEdit.Descendants().ToList();
foreach(ParagraphProperties pp in paraProps)
{
// I also tried using Descendents here, but both return null
RunProperties addRunProps = pp.GetFirstChild();
runProps.Add(addRunProps); // Nothing gets added
}
foreach (RunProperties rp in runProps)
{
rp.RemoveAllChildren();
rp.AddChild(new FontSize() { Val = "1" });
}
[/code]
Könnte mir jemand eine Anleitung geben, wohin ich von hier aus gehen soll?