AGB  ·  Datenschutz  ·  Impressum  







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

excel to interbase

Offene Frage von "hirsch"
Ein Thema von hirsch · begonnen am 20. Sep 2011 · letzter Beitrag vom 22. Sep 2011
Antwort Antwort
hirsch

Registriert seit: 29. Jan 2008
Ort: Tuttlingen
88 Beiträge
 
Delphi 2007 Professional
 
#1

excel to interbase

  Alt 20. Sep 2011, 12:09
Datenbank: interbase/excel • Version: 6.0/2007 • Zugriff über: ibconnect
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;
Wolfgang Hirsch

Geändert von hirsch (20. Sep 2011 um 12:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: excel to interbase

  Alt 20. Sep 2011, 12:28
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.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#3

AW: excel to interbase

  Alt 20. Sep 2011, 12:33
Bitte mal die Delphi-Tags drum setzen, dann kann man das auch leichter lesen.
Lars
  Mit Zitat antworten Zitat
hirsch

Registriert seit: 29. Jan 2008
Ort: Tuttlingen
88 Beiträge
 
Delphi 2007 Professional
 
#4

AW: excel to interbase

  Alt 20. Sep 2011, 12:59
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.
Was braucht man für ADO?

Bitte mal die Delphi-Tags drum setzen, dann kann man das auch leichter lesen.
.. erledigt.
War keine Absicht, ich konnte es auch nicht richtig lesen.....
Wolfgang Hirsch
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: excel to interbase

  Alt 20. Sep 2011, 15:05
Was braucht man für ADO?
Wenn Du ein halbwegs aktuelles Windows hast und Excel darauf installiert, brauchst Du Computerseitig nix. Du bist allerdings nicht der Erste der dieses Poblem hat Hier im Forum suchenADO Excel
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#6

AW: excel to interbase

  Alt 21. Sep 2011, 07:53
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:
function TForm1.lese_Artikel(art: string):String;
begin
  result:=excel.Worksheets[1].cells.find(art, MatchCase:=False, SearchFormat:=False).Offset(0,-1).Value
end;
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.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: excel to interbase

  Alt 21. Sep 2011, 07:59
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.
Die Probleme mit Formeln, Datentypen, ... sind bei direkten Zugriff geringer als wenn man über ADO geht.
Und wenn man mit Ranges arbeitet gehts auch ziemlich fix.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
hirsch

Registriert seit: 29. Jan 2008
Ort: Tuttlingen
88 Beiträge
 
Delphi 2007 Professional
 
#8

AW: excel to interbase

  Alt 22. Sep 2011, 12:42
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.
Wolfgang Hirsch
  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 22:38 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