AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

In Excel Worksheet mit OLE suchen

Ein Thema von Josef_D · begonnen am 12. Jan 2013 · letzter Beitrag vom 13. Jan 2013
Antwort Antwort
Josef_D

Registriert seit: 22. Aug 2006
Ort: Aachen
7 Beiträge
 
Delphi XE3 Professional
 
#1

In Excel Worksheet mit OLE suchen

  Alt 12. Jan 2013, 18:04
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 ?
Im Moment programmiere ich noch mit Delphi 5, XE3 ist aber schon bestellt ...
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

AW: In Excel Worksheet mit OLE suchen

  Alt 13. Jan 2013, 09:52
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

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Josef_D

Registriert seit: 22. Aug 2006
Ort: Aachen
7 Beiträge
 
Delphi XE3 Professional
 
#3

AW: In Excel Worksheet mit OLE suchen

  Alt 13. Jan 2013, 13:10
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.
Im Moment programmiere ich noch mit Delphi 5, XE3 ist aber schon bestellt ...
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: In Excel Worksheet mit OLE suchen

  Alt 13. Jan 2013, 14:17
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

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:01 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