OpenXML SDK (Word) – Bearbeiten Sie die Schriftgröße des Absatzes nach der letzten Tabelle im DokumentC#

Ein Treffpunkt für C#-Programmierer
Guest
 OpenXML SDK (Word) – Bearbeiten Sie die Schriftgröße des Absatzes nach der letzten Tabelle im Dokument

Post by Guest »

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:

Code: Select all




 // Font Size





 // Font Size



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?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post