Tabellenzeilen als String speichern verliert Zeilenhöhe

  • Hallo,

    wie im Thread

    5000 Tabellen erzeugen - Wie Performance und Layout verbessern

    möchte ich nun mehrere kleine Tabellen in einen Text einfügen.

    Anstelle der Eigenerzeugung der Zeilen und Spalten dachte ich daran, die Tabelle ihren Inhalt aus einem String lesen zu lassen.

    So wird also die Ursprungstabelle in einen String geschrieben

    Code
    TabString := Grundtabelle.SaveToString(true,'WPT');

    und dann bei der Erzeugung des Dokuments diese Grundtabelle 100 mal eingefügt

    Code
    for i := 1 to 100 do begin
        Table := WPRichText.ActiveParagraph;
        Table := Table.AppendNewTable();
        Table.LoadFromString(TabString, 'WPT');
    end;
    WPRichText.DelayedReformat;

    Scheinbar gehen dabei aber die Zeilenhöhen der Grundtabelle sowie die Textfarbe verloren!

    Die Texteinzüge bleiben erhalten.
    Alle Zeilen der 100 eingefügten Tabellen sind gleich hoch, obwohl die Grundtabelle z.B. Zeile 1 nur minimal hoch ist (wenige Twips)

    Leider hat SaveToString keine Parameter, die das zusätzliche Speichern der Tabellenzeilenhöhen erzwingen würden.

    Was kann ich verbessern damit die Untertabellen mit all ihren Formatierungen, Texteinzügen etc. zwischengespeichert werden?

    Ciao

    Stefan

    2 Mal editiert, zuletzt von skoschke (28. Februar 2019 um 09:15)

    • Offizieller Beitrag

    Die Verwendung in der Art ist so nicht vorgesehen! Man kann nicht ein Tabellenobjekt einfach so aus einem String laden. Man könnte vielleicht Inhalte von Zellen oder eben einen Text welcher eine Tabelle enthält, aber Table.LoadFromString geht nicht und vermutlich sind danach die Datenstrukturen defekt.

    Wie vermutlich bekannt, kann ein Text mit LoadFromString einfach eingefügt werden. CPPosition := MaxIt geht an das Ende und dann wieder wie Schritt 1.

    Sie können sich gerne per e-mail an den Support wenden. Wir machen auch Auftragsentwicklung für spezielle Problemlösungen:

    Eine Lösung für o.g. Problem sehe ich in der Ausgliederung eines Tabellenabsatzes aus Text 1 und Wieder eingliederung in den Ziel Text B.

  • eine Tabelle im Ausgangsdokument mit

    Code
    tbl := WPRichText1.FindTable('Tabelle 2');
    tablestring := tbl.SaveToString(false, 'WPT');

    wegspeichern und im neuen Dokument an Cursorposition mit

    Code
    WPRichText2.LoadFromString(tablestring, 'WPT', false);

    einfügen dürfte aber keine Probleme bereiten, oder?

    Dann muss ich nur dafür sorgen, dass falls der Cursor aktuell in einer Tabelle steht, dieser ans Ende der Tabelle verschoben wird um danach einzufügen

    Code
    while WPRichText2.ActiveParagraph.ParentTable <> nil do
          WPRichText2.CPMoveNext;

    spricht etwas gegen diese Vorgehensweise?

    Ciao

    Stefan