Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   In Excel Worksheet mit OLE suchen (https://www.delphipraxis.net/172590-excel-worksheet-mit-ole-suchen.html)

Josef_D 12. Jan 2013 17:04

In Excel Worksheet mit OLE suchen
 
Da ich nicht so genau weiß, in welche Rubrik mit dieser Frage und auch schon andere User ähnliche Fragen hier gestellt haben, denke ich das paßt in etwa.

Die Frage handelt von Fernsteuern von MS Excel über OLE. Im großen und ganzen komme ich damit zurecht.
Ich suche jetzt noch ein paar Details, unter anderem das Suchen von Einträgen in einem Excel Arbeitsblatt.

In Excel gibt es eine Funktion 'Suchen', die als Ergebnis die Koordinate der Zelle anzeigt, in der das Gesuchte steht.

Gibt es eine solche Funktion auch im OLE. Ich habe versucht dazu ein Source Sample zu finden. Leider ohne Erfolg.
Es gibt wohl in VB eine Funktion Worksheet.Range['..','..'].Find( .... ), die ich aber nicht in Delphi zum Laufen bringe.

Weiß jemand Hilfe ?

Keldorn 13. Jan 2013 08:52

AW: In Excel Worksheet mit OLE suchen
 
Hallo,

zeig mal bitte mehr code, was Du bis jetzt genau hast und was Du genau nicht zum Laufen bekommst
Insesondera auch, wie du Dich mit Excel verbindest.

Gruß Frank

PS: Willkommen :hi:

Josef_D 13. Jan 2013 12:10

AW: In Excel Worksheet mit OLE suchen
 
Okay, mit dieser Funktion nehme ich Kontakt zu meiner Exceldatei auf, das funktioniert einwandfrei:

function TForm4.ExcelBlaetterAuslesen:boolean;
var
a : string;
anz : integer;
i : integer;
j : integer;
begin

if Filename_Arbeitsplan <> '' then
begin
//Excel erst mal gültig deklarieren
NoExcel := FALSE;
try
ExcelApplication1.Connect;
except
ShowMessage('Excel konnte nicht gestartet werden ! Möglicherweise ist auf diesem System kein Excel installiert.');
//Kein Excel gefunden, NoExcel für Dateischließen ungültig machen
NoExcel := TRUE;
exit;
end;
LCID := GetUserDefaultLCID;
ExcelApplication1.Visible[LCID] := FALSE;

//Arbeitsplan öffne
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workboo ks.Open(Filename_Arbeitsplan, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam,
EmptyParam, LCID));

ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheet s.Item[1] as _Worksheet);
ExcelWorksheet1.Activate(LCID);

anz := ExcelWorkbook1.Worksheets.Count;

for i:= 1 to anz do
begin
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheet s.Item[i] as _Worksheet);
ExcelWorksheet1.Activate(LCID);
//Filialnummer eintragen
a := ExcelWorksheet1.Name;
JvTabControl1.Tabs.Add(a);
end;
end;
Form4.BringToFront;
end;

Und diese Prozedur stellt die Verbindung mit einem Arbeitsblatt in der Exceldatei her, funktioniert auch

procedure TForm4.JvTabControl1Change(Sender: TObject);
var
a: string;
i: integer;
begin
i := JvTabControl1.TabIndex;
a := JvTabControl1.Tabs.Strings[i];

ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheet s.Item[i+1] as _Worksheet);
ExcelWorksheet1.Activate(LCID);
{
ExcelWorksheet1.Range['A1','F10'].Find('Personal', EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyP aram,EmptyParam,EmptyParam);

ExcelWorkSheet1.Range['A1','B10'].Find('Personal',EmptyParam,TOLEEnum(xlValues),TOL EEnum(xlWhole),
TOLEEnum(xlByColumns),TOLEEnum(xlNext),
TOLEEnum(False),TOLEEnum(False),
EmptyParam,EmptyParam,
EmptyParam);
}


end;


und in den geschweiften Klammern sind meine Versuche zu sehen einen Eintrag in dem Arbeitsblatt zu suchen.
Ich kann mir natürlich eine Funktion schreiben die unter Ausnutzung der Range.Value Methode Zelle für Zelle untersucht.
Aber ich vermute das geht auch eleganter.

Keldorn 13. Jan 2013 13:17

AW: In Excel Worksheet mit OLE suchen
 
nutz mal bitte die Delphi-tags, wenn du Code postest.

probier mal das, habe ich in meinen Testprojekten gefunden. Ich weiß jetzt aber nicht mehr wieso weshalb warum ;-), mußt Du dir selber anpassen.
Delphi-Quellcode:
    //Var erg:excelrange;
    erg:= ExcelWorksheet1.Range['A1','F10'].Find(
                 'Personal',
                 emptyparam {ExcelWorksheet1.Cells.Item[Arow,Acol], },
                 xlValues,
                 xlWhole,
                 xlByRows,
                 xlNext,
                 false,
                 false,
                 EmptyParam);
     if erg<>NIL then
       begin
         Memo1.Lines.Add('juhu');
         Memo1.Lines.Add(inttostr(erg.Column)+'/'+inttostr(erg.Row));
       end
      else
         Memo1.Lines.Add('nix gefunden');
dann mal das ganze xl... durch emptyparam zu ersetzen, an was es dann wirklich liegt und wo eine Angabe zwingend erforderlich ist.

Gruß Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:35 Uhr.

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