Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Tabellenhöhe einer in Word eingefügten Tabelle (https://www.delphipraxis.net/110773-tabellenhoehe-einer-word-eingefuegten-tabelle.html)

aaron 24. Mär 2008 16:52


Tabellenhöhe einer in Word eingefügten Tabelle
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo

Ich füge die Zeilen eines Stringgrids in ein Worddokument ein.

Die Rows werden aber in der Höhe viel zu groß. (schaut euch mal den Screenshot an)
Ich habe versucht die Höhe zu bestimmen, was auch funktioniert.
Aber, bei mehrzeiligen Text in der Tabelle wird der Rest einfach abgeschnitten
So habe ich die Höhe bestimmt:

Delphi-Quellcode:
// wdRowHeightAuto = 0;
// wdRowHeightAtLeast = 1;
// wdRowHeightExactly = 2;

WordTable.Rows.SetHeight(15,2);
Wie kann ich die Höhe anpassen ohne das Text abgeschnitten wird?

Grüße
Aaron

mkinzler 24. Mär 2008 17:04

Re: Tabellenhöhe einer in Word eingefügten Tabelle
 
Berechnen, wie viwl Zeilen der Text belegt und diese dann mit der Höhe pro Zeile multiplizieren.

aaron 24. Mär 2008 17:09

Re: Tabellenhöhe einer in Word eingefügten Tabelle
 
Hallo,
was ist wenn es mehr als 50 Variationen gibt?
Die zweite hat 420px
Delphi-Quellcode:
    WordTable.Columns.Item(2).SetWidth(420,0);
Wie kann ich das über das Stringgrid ausrechnen?

toms 24. Mär 2008 17:10

Re: Tabellenhöhe einer in Word eingefügten Tabelle
 
Was passiert denn, wenn du wdRowHeightAuto setzt?

aaron 24. Mär 2008 17:14

Re: Tabellenhöhe einer in Word eingefügten Tabelle
 
Das bringt keine Änderung
Delphi-Quellcode:
 WordTable.Rows.SetHeight(0,wdRowHeightAuto );

aaron 25. Mär 2008 11:08

Re: Tabellenhöhe einer in Word eingefügten Tabelle
 
Hallo,
hat jemand noch eine Idee?
Ich habe nun alles durchprobiert.
Außer das
Zitat:

Zitat von mkinzler
Berechnen, wieviel Zeilen der Text belegt und diese dann mit der Höhe pro Zeile multiplizieren.

Der Text belegt keine Zeilen im Stringgrid, das ist immer nur eine Zeile, egal wieviel Text drinnen steht.
Ich wäre über ein Beispiel äußerst happy.

Freundliche Grüße
Aaron

mkinzler 25. Mär 2008 11:10

Re: Tabellenhöhe einer in Word eingefügten Tabelle
 
Du kannst aber anhand der länge des Strings errechnen wie viele Zeilen es ergibt.

aaron 25. Mär 2008 11:28

Re: Tabellenhöhe einer in Word eingefügten Tabelle
 
Hallo,

ich muss also per Schleife das Stringgrid durcharbeiten.
Ist die Länge des Strings in einer Zeile länger als X dann füg einen Umbruch ein bis Zeile abgearbeitet wurde.
Dann wieder in die nächste Zeiel springen. Richtig?
Wie überträgt einen Zeilenumbruch? so?
Delphi-Quellcode:
 #13 + #10
Gruß
Aaron

mkinzler 25. Mär 2008 11:31

Re: Tabellenhöhe einer in Word eingefügten Tabelle
 
Besser mit der Konstante sLineBreak. Aber eigentlich ist das ja nicht nötig. Du könntest so aber entscheiden wieviel Zeilen die Tabelle in Word belegt

Delphi-Quellcode:
Zeilenanzahl := <Länge> DIV <Zeichen pro Zeile>;

aaron 25. Mär 2008 12:27

Re: Tabellenhöhe einer in Word eingefügten Tabelle
 
Hallo mkinzler,
Zitat:

Zeilenanzahl := <Länge> DIV <Zeichen pro Zeile>;
Wie meinst du das?
82 zeichen darf eine Zeile lang sein.

Gruß
Aaron

mkinzler 25. Mär 2008 12:32

Re: Tabellenhöhe einer in Word eingefügten Tabelle
 
Du übertägst ja Strings vom Grid nach Word. Angenommen ein Text ist 145 Zeichen lang und Word stellt 80 zeichen dar, bevor es umbricht dann ergibt 145 Div 80 = 1 dazu zählst du dann 1 (hab ich oben übersehen)

aaron 25. Mär 2008 12:37

Re: Tabellenhöhe einer in Word eingefügten Tabelle
 
Danke

Wo muss ich die Abfrage (wenn ich die mal zusammen habe) einbauen?

Gruß
Aaron

aaron 25. Mär 2008 14:51

Re: Tabellenhöhe einer in Word eingefügten Tabelle
 
Hallo,
ich habs nun so gemacht, was aber leider nicht funktioniert:

Delphi-Quellcode:
  //WordTable.Rows.SetHeight(15,2);;
  WordTable.Columns.Item(1).SetWidth(40, 0);
  WordTable.Columns.Item(2).SetWidth(420, 0);

  begin
    ProgressBar1.Max := iRows;
    for iGridRows := 1 to iRows do
    begin
      ProgressBar1.Position := 6 + iGridRows;
      for jGridCols := 1 to iCols do
      begin
        s1 := StringGrid2.Cells[1, igridRows - 1];
       // showmessage(s1);
        if Length(s1) < 81 then begin
          WordTable.Rows.SetHeight(15, 2);
         end else
       if (Length(s1) > 82) and (Length(s1) < 164) then begin
        WordTable.Rows.SetHeight(30, 2);
        end;
     WordTable.Cell(iGridRows, jGridCols).Range.Text := StringGrid2.Cells[jGridCols - 1, igridRows - 1]; //+ sLineBreak+ sLineBreak
          end;
  end;
  ProgressBar1.Position := 0;
Sieht jemand meinen Fehler?

[Edit]
ich habe auch über
Delphi-Quellcode:
  WordTable.Columns.Item(1).SetWidth(40, 0);
  WordTable.Columns.Item(2).SetWidth(420, 0);
das als Schleife ausprobiert dann gibt es auch nur Fehler.

Gruß
Aaron

aaron 25. Mär 2008 16:25

Re: Tabellenhöhe einer in Word eingefügten Tabelle
 
Hallo,
ich nochmal.
Ich habe das gerade mit Word2000 getestet, dort wird alles in der richtigen Höhe angezeigt.
Nur in Word2007 wird die Zeilenhöhe nicht richtig angezeigt.
Wenn ich nun aber in Word2007 auf den Reiter "Entwurf" klicke und dort auf irgendein Tabellengitternetz dann stimmen die Höhehn auch wieder.
Seltsam.
Aaron


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz