Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Excel: Anzahl der Zeilen bis zum Seitenumbruch ermitteln (https://www.delphipraxis.net/100391-excel-anzahl-der-zeilen-bis-zum-seitenumbruch-ermitteln.html)

Reinhardtinho 27. Sep 2007 15:43


Excel: Anzahl der Zeilen bis zum Seitenumbruch ermitteln
 
Hallo zusammen,

ich füge mittels der Komponente TExcelApplication (bei D5 unter Server) Daten in ein Exceldokument ein.

Ich habe verschieden große Blöcke und möchte nun feststellen, ob dafür noch genügend Zeilen frei sind (von meiner aktuellen Position [Zelle] bis zum nächsten Seitenumbruch). Diese Blöcke sollen immer zusammenhängend sein und nicht auf einer Seite beginnen und auf der nächsten fortgesetzt werden.

Mein Frage nun:

Wie ermittele ich die Anzahl der Zeilen von meiner Zellposition bis zum Seitenumbruch?



Vielen Dank und freundliche Grüße

Lorenz

marabu 27. Sep 2007 18:53

Re: Excel: Anzahl der Zeilen bis zum Seitenumbruch ermitteln
 
Hallo Lorenz,

laut Excel VBA Reference solltest du ein von Excel automatisch eingefügtes PageBreak als row property abfragen können. Ich würde über die Zeilen iterieren bis ich das nächste PageBreak gefunden habe. Funktioniert auch bei Spalten und anderen Objekten.

Grüße vom marabu

Reinhardtinho 28. Sep 2007 10:14

Re: Excel: Anzahl der Zeilen bis zum Seitenumbruch ermitteln
 
Vielen Dank marabu,

ich poste hier mal meine Funktion, die die Anzahl der Zeilen bis zum Seitenumbruch zurückgibt:

Delphi-Quellcode:
  function GetFreeLines(WS : _WorkSheet; J : Integer) : Integer;
  var
    NextPB   : Excel97.Range;
    CurrPos  : Integer;
    CurrCount : Integer;
    k        : Integer;
  begin
    CurrPos  := J;
    CurrCount := WS.HPageBreaks.Count;

    // Zeilen befüllen, damit Count hochgezählt wird
    while (WS.HPageBreaks.Count = CurrCount) do
    begin
      Inc(J);
      WS.Cells.Item[J,1].Select;
      WS.Cells.Item[J,1].Value := '0';
    end; (* of while *)

    NextPB := WS.HPageBreaks.Item[WS.HPageBreaks.Count].Location;

    // Zeilen wieder leeren
    for k := j downto CurrPos do
    begin
      WS.Cells.Item[k,1].Select;
      WS.Cells.Item[k,1].Value := '';
    end; (* of for *)

    result := NextPB.Row - WS.Cells.Item[CurrPos,1].Row;
  end; (* of GetFreeLines *)
Mit J wird die aktuelle Position überbegen.

Man muss wohl was in die Zellen reinschreiben, damit der automatische Zeilenumbruch aktiv wird, mit leeren Zellen hat es bei mir nicht funktioniert.

MFG
Lorenz


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:35 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