Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Die letzte gefüllte Zeile finden (https://www.delphipraxis.net/25688-die-letzte-gefuellte-zeile-finden.html)

semo 10. Jul 2004 16:06

Re: Die letzte gefüllte Zeile finden
 
Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleServer, ExcelXP, COmObj;

type
  TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    ExcelApplication1: TExcelApplication;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    function ermittleLetzteSpalteDerExcelDatei(dateiname: string): Integer;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
    ShowMessage(IntToStr(ermittleLetzteSpalteDerExcelDatei(OpenDialog1.FileName)));
end;


function TForm1.ermittleLetzteSpalteDerExcelDatei(dateiname: string): Integer;
var
  myExcel, sheet: OLEVariant;
  zeile: Integer;
begin
  if dateiname <> '' then
  begin
    try
      // Create Excel-OLE Object
      myExcel := CreateOleObject('Excel.Application')
    except
      ShowMessage('Excel konnte nicht gestartet werden!');
      exit
    end;

    // Excel verbergen
    myExcel.Visible := false;

    // Öffnen der gewählten Arbeitsmappe
    myExcel.Workbooks.Open(dateiname);

    // Sheet := XLApp.Workbooks[1].WorkSheets[1];
    Sheet := myExcel.Workbooks[ExtractFileName(dateiname)].WorkSheets[1];

    // In order to know the dimension of the WorkSheet, i.e the number of rows
    // and the number of columns, we activate the last non-empty cell of it

    Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;

    //myExcel.ActiveCell.Row;

   Result := myExcel.ActiveCell.Row;

   // Excel wieder schließen
   myExcel.DisplayAlerts := False;
   myExcel.Quit;
   myExcel := Unassigned;
   Sheet  := Unassigned;
  end;
end;
end.
so funktionierts!
auf dem formular ein OpedDialog und ein Button platzieren!

lg marcus

TheMiller 10. Jul 2004 16:34

Re: Die letzte gefüllte Zeile finden
 
Habe den Code jetzt so abgeändert, da die Excel-Datei schon bekannt, geöffnet und in Gebrauch ist. Die Fehlermeldung lautet:

Ungültiger Index.

Delphi-Quellcode:
var
  myExcel, sheet: OLEVariant;
  zeile: Integer;
begin
  myExcel := CreateOleObject('Excel.Application');

    // Sheet := XLApp.Workbooks[1].WorkSheets[1];
    Sheet := myExcel.Workbooks[ExtractFilePath(ParamStr(0))+'Mappe1.xls'].WorkSheets[1];

    // In order to know the dimension of the WorkSheet, i.e the number of rows
    // and the number of columns, we activate the last non-empty cell of it

    Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;

    //myExcel.ActiveCell.Row;

   Result := myExcel.ActiveCell.Row;

   // Excel wieder schließen
   myExcel.DisplayAlerts := False;
   myExcel.Quit;
   myExcel := Unassigned;
   Sheet  := Unassigned;
  end;

semo 10. Jul 2004 16:36

Re: Die letzte gefüllte Zeile finden
 
an wen wendest du dich jetzt @DJ-SPM?

TheMiller 10. Jul 2004 16:38

Re: Die letzte gefüllte Zeile finden
 
Achso, du weist das ja nicht... sunshine-girl ist meine Freundin. Ich war bei ihr und habe unter ihrem namen gepostet. Wir haben also die ganze Zeit miteinander geredet.

Habe es jetzt nochmal so probiert:

Delphi-Quellcode:
var myExcel:OleVariant;
begin
  myExcel := CreateOleObject('Excel.Application');
ExcelWorksheet1.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
ShowMessage(IntToStr(myExcel.ActiveCell.Row));
aber da kommt nur eine Zugriffsverletzung... Ich dreh bald durch

TheMiller 10. Jul 2004 21:11

Re: Die letzte gefüllte Zeile finden
 
hat sonst keiner eine Idee?

TheMiller 10. Jul 2004 23:27

Re: Die letzte gefüllte Zeile finden
 
Sorry, dass ich schon wieder pushe, aber ich brauche gaaanz dringend Hilfe. Bitte verzeiht mir das mal!

TheMiller 10. Jul 2004 23:53

Re: Die letzte gefüllte Zeile finden
 
So,

nachdem ich noch ein bissl probiert habe, kam ich zu folgendem Code:

Delphi-Quellcode:
procedure TForm4.Button4Click(Sender: TObject);
const
  xlCellTypeLastCell = $0000000B;
var myExcel, sheet:OleVariant;
    a:Integer;
begin
myExcel := CreateOleObject('Excel.Application');
[b]Sheet:=myExcel.Workbooks[ExtractFileName(ParamStr(0))+('Mappe1.xls')].Worksheet[1];[/b]
a:=Sheet.Cells.SpecialCells(xlCellTypeLastCell,EmptyParam).Activate;
ShowMessage(IntToStr(a));
end;
Doch hier sagt er "Ungütliger Index" und markiert die fett gedruckte Zeile im Code!

xineohp 11. Jul 2004 01:11

Re: Die letzte gefüllte Zeile finden
 
moin,

ist nur mal so geraten: hast dus schon mal mit Worksheet[0] probiert? soll ja vorkommen, das der Index bei 0 anfängt und das ist ja hier der einzige Index weit und breit.

semo 11. Jul 2004 09:17

Re: Die letzte gefüllte Zeile finden
 
wird nicht funktionieren....

in excel beginnt der index immer bei 1: egal ob zelle, worksheet, dateiname (mappe1.xls)....

:wink:

semo 11. Jul 2004 10:18

Re: Die letzte gefüllte Zeile finden
 
also damit ich richtig verstehe: du hast excel bereits geöffnet und auch eine gefüllte Mappe geladen?
oder willst du excel öffnen unter angabe einer datei und daraus was laden bzw die letzte zeile angeben lassen?

was willst du denn überhaupt damit machen wenn man fragen darf?


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:12 Uhr.
Seite 2 von 3     12 3      

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