![]() |
Datenbank: interbase/excel • Version: 6.0/2007 • Zugriff über: ibconnect
excel to interbase
Liebes Forum,
Was ich tun will: In eine Interbasedatenbank in eine Tabelle, in eine Spalte was reinschreiben, was ich aus Excel 2007(nur 1 sheet) ausgelesen habe. In interbase lese ich aus einer Tabelle einen String aus, diesen String soll mir Excel finden, die linke Nachbarzelle als Ergebnis zurückbringen. Wenn ich das Ergebnis habe, kann ich das in die Interbasetabelle zurückschreiben. Mein Problem: Ich greife über die OLE auf die Exceltabelle zu. In Excel habe ich ein Makkro aufgezeichnet das mir den find mitgeplottet hat. I'ch bin aber nicht in der Lage das was ich da sehe in Delphi zu übersetzen. Makkro: Cells.Find(What:="100300", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, SearchFormat:=False).Activate Makkro ende Was macht excel da mit den _ (Underscores)? Wie bekomme ich die aktuelle Zeile und Spalte des Cursors? Nun suche ich schon seit 2 Tagen im internet nach etwas, was ich verwerten kann, aber leider ohne Erfolg. Alle Tutorials beschreiben wie man in Excel schreibt, aber nicht wie man aus Excel liest, wenn man weder Zeile noch Spalte kennt. Was ich bisher habe:
Delphi-Quellcode:
begin
//Excel öffnen und Tabelle laden Dateiname:='D:\TDB_Artikel_neu\Teileneu.xlsx'; if FileExists(Dateiname) then begin try Excel:=CreateOleObject('Excel.Application'); Excel.Workbooks.Open (Dateiname); b_Excel:=True; Excel.Visible:=false; with Datamodule1 do begin CDS.First; while not CDS.Eof do begin art:=cds.FieldByName('ART_NR').AsString; grp:=cds.FieldByName('ART_GR').Asstring; val(art,wert,code); if wert<>0 then begin schnart:=lese_Artikel(art); end; cds.Next; end; end; except Showmessage('Excel konnte nicht gestartet werden !'); Excel.visible:=true; EXIT; end; end; end; function TForm1.lese_Artikel(art: string):String; var spalte, zeile : integer; XLApp :OleVariant; X, Y, Z: Variant; begin //Zeilenweise auslesen excel.Worksheets[1].cells.find(art, MatchCase:=False, SearchFormat:=False).Activate; zeile:= Excel.ActiveCell.Row; //<-funktioniert nicht //zeile:=excel.cells[zeile]; //<-funktioniert nicht //spalte:=excel.cells[spalte]; //<-funktioniert nicht spalte := Excel.ActiveCell.Column; //<-funktioniert nicht result:=excel.cells[zeile,spalte-1].select;//<-sinnfrei end; |
AW: excel to interbase
Warum verwendest Du nicht ADO für den Zugriff auf Excel? Damit kannst Du lesen und schreiben. Musst Dir nur den richtigen ConnectionString bauen. Und formatier mal bitte Deinen Source.
|
AW: excel to interbase
Bitte mal die Delphi-Tags drum setzen, dann kann man das auch leichter lesen.
|
AW: excel to interbase
Zitat:
Zitat:
War keine Absicht, ich konnte es auch nicht richtig lesen..... |
AW: excel to interbase
Zitat:
![]() |
AW: excel to interbase
Zu deiner bisherigen Variante:
cells.find liefert ein Range Objekt zurück, davon liefert .Offset(0,-1) wieder ein Range-Objekt, nämlich das mit der Zelle links daneben zurück und .Value liefert deren Wert:
Code:
Das ist aber nur Q+D. Findet Find nichts, liefert es Nothing/nil zurück und dann knallt der Rest. Sauber wäre also eine variable (z.B. rg) für das Range-Objekt zu erstellen. .Find anwenden. Wenn rg nicht nil, dann weiter machen mit .Offset usw.
function TForm1.lese_Artikel(art: string):String;
begin result:=excel.Worksheets[1].cells.find(art, MatchCase:=False, SearchFormat:=False).Offset(0,-1).Value end; |
AW: excel to interbase
Zitat:
Und wenn man mit Ranges arbeitet gehts auch ziemlich fix. |
AW: excel to interbase
Vielen Dank für Eure Ideen,
weil sich Excel so umständlich anstellt, habe ich die Tabelle in eine CSV exportiert. Diese lese ich nun in ein TStringGrid ein, da alles nur Text ist. Excel und co habe ich zwar installiert, aber mit dem ADO-Zugriff habe ich noch nie etwas gemacht. Ich werde mir das mal ansehen, wenn die Zeit nicht mehr so brennt. Denn ich denke asi ist bestimmt ein Faß, das sich da auf tut. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:26 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 by Thomas Breitkreuz