Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi HTML parsen und in Excel 2007 Tabelle eintragen? (https://www.delphipraxis.net/128043-html-parsen-und-excel-2007-tabelle-eintragen.html)

Hedge 23. Jan 2009 06:34


HTML parsen und in Excel 2007 Tabelle eintragen?
 
Hallo,
habe bisher nichts explizites zum Thema gefunden.

Also ich möchte eine HTML-Seite in Delphi parsen (muss sich vorher einloggen) und dann Werte in bestimmte Felder einer Excel-Tabelle eintragen.

Ist das auch mit VBA möglich und wenn nein, was brauch ich dazu in Delphi bzw. wie setze ich es am schnellsten um.

Bernhard Geyer 23. Jan 2009 06:39

Re: HTML parsen und in Excel 2007 Tabelle eintragen?
 
HTML-Seite parst du am besten mit Hilfe von TWebBrowser und dem Document-Property (Unit MSHTML.pas einbinden und Documenet nach IHTMLDocument2 casten. Der Zugriff auf Excel kannst du entweder über die Komponenten TExcel machen oder du importierst dir selbst die Typbibliotheken von MS. Doku zu IHTMDocument2 und Excel findest du bei MS in der MSDN.

Hedge 23. Jan 2009 13:12

Re: HTML parsen und in Excel 2007 Tabelle eintragen?
 
Danke für die Tipps.
Hab das mit TWebBrowser hinbekommen und es auch geschafft die Typbibliotheken zu installieren.

Hab mich gerade bei MSDN zum Thema Excel umgeschaut und werd nicht so richtig schlau draus, was ich nun machen muss um erstmal nur Datensätze aus der gerade geöffneten Tabelle zu lesen.

Es stehen die Komponenten:
TExcelQueryTable
TExcelApplication
TExcelChart
TExcelWorksheet und
TExcelWorkbook
zur Verfügung.

fkerber 23. Jan 2009 13:13

Re: HTML parsen und in Excel 2007 Tabelle eintragen?
 
Hi!

Schau mal, ob dich das weiterbringt:
http://www.delphipraxis.net/internal...ct.php?t=43640


Ciao, Frederic

Hedge 23. Jan 2009 13:27

Re: HTML parsen und in Excel 2007 Tabelle eintragen?
 
Das ist ganz gut, aber meine Komponenten funktionieren anders als in dem Tutorial.

Zum Beispiel beschwert der Compiler sich bei der Zeile:

Delphi-Quellcode:
ExcelApp.Range['A1:B4'].Select;
über: "not enough actual parameters"

generell will der bei allen Funktionen mehr Parameter haben...

Connecten zu Excel und einfach Befehle klappen, aber z.B. folgendes geht nicht

Delphi-Quellcode:
ExcelApp.Worksheets[0].Cells.Item[1.1].Value;

nahpets 23. Jan 2009 13:42

Re: HTML parsen und in Excel 2007 Tabelle eintragen?
 
Hallo,

befürchte, Du bist auf dem falschen Dampfer:

Range['A1:B4'].Select gehört eher zu einem ExcelWorkSheet.

Itmes 1.1 wird nicht gehen, allenfalls 1,1.

Probiere mal bitte, ob Du damit weiterkommst:
Delphi-Quellcode:
Uses ..., Excel97, ... ;
...
Var
          ea             : TExcelApplication;
          ewb            : TExcelWorkbook;
          ews1            : TExcelWorkSheet;
begin
  // Variabeln für die Verbindung zu Excel initialisieren
  ea              := TExcelApplication.Create(Self);
  ewb             := TExcelWorkbook.Create(Self);
  ews1             := TExcelWorksheet.Create(Self);
  // Verbindungsart zu Excel festlegen.
  ea.ConnectKind  := ckNewInstance;
  ewb.ConnectKind := ckNewInstance;
  ews1.ConnectKind := ckNewInstance;
  // Diese ID wird zur Komunikation mit Excel benötigt.
  lcid            := LOCALE_USER_DEFAULT;
  Try
    // Excel soll unsichtbar arbeiten.
    ea.Visible[lcid] := False;

// Dein Code...

    ews1.Range['A1','A1'].Select;
    Try
      // Gibts die Datei schon, dann löschen.
      If FileExists(sFileName) Then DeleteFile(sFileName);
      // Exceldatei speichern.
      ewb.SaveAs(sFilename,xlNormal,'','',False,False,xlNoChange,xlLocalSessionChanges,False,'','',lcid);
    Except
      // Wenn's Speichern der Exceltabelle schief ging,
      // die Tabelle ist in Excel geöffnet und kann vom Anwender
      // manuell gespeichert werden.
      On E : Exception Do Begin
        MessageDlg('Fehler beim Speichern der Excel-Tabelle ' + sFileName + '.'
        + #13 + e.Message,mtError,[mbok],0);
        // Excel soll sichtbar arbeiten.
        ea.Visible[lcid] := True;
      End;
    End;
    Try
      // Workbook schließen
      // Excel fragt nach, ob Änderungen gespeichert werden sollen
      ea.Workbooks.Close(lcid);
      ea.Quit;
    Except
      On E : Exception Do Begin
        MessageDlg('Fehler beim Schließen der Excel-Tabelle ' + sFileName + '.'
        + #13 + e.Message,mtError,[mbok],0);
        // Excel soll sichtbar arbeiten.
        ea.Visible[lcid] := True;
      End;
    End;
  Finally
    // Verbindung zu Excel trennen.
    ews1.Disconnect;
    ewb.Disconnect;
    ea.Disconnect;
    ews1.Free;
    ewb.Free;
    ea.Free;
  End;
Das ist jetzt ganz schnell per "Vererbung per Copy&Paste" aus einem Programm geklaut, daher kann ich nicht sagen, ob es so auf Anhieb funktionieren wird.

Hedge 23. Jan 2009 14:00

Re: HTML parsen und in Excel 2007 Tabelle eintragen?
 
Der mag diese Zeile nicht:

Delphi-Quellcode:
  lcid            := LOCALE_USER_DEFAULT;
[Pascal Error] Form.pas(112): E2029 '(' expected but ':=' found
[Pascal Error] Form.pas(112): E2014 Statement expected, but expression of type 'Integer' found

Muss man nicht Connect machen auf Application oder alle 3 ? Ich seh da im Moment nicht durch.

Habe als ConnectKind bei allen 3 Sachen ckRunningInstance, weil ich in ner geöffneten Excel-Tabelle rumwurschteln möchte.

nahpets 23. Jan 2009 14:12

Re: HTML parsen und in Excel 2007 Tabelle eintragen?
 
Hallo,

das Teil, aus dem ich da kopiert habe, ist schon Jahre alt, weiß da auf Anhieb auch nicht mehr so genau, was jetzt zwingend erforderlich ist, war nur als Vorschlag gedacht.

lcid : Integer;

LOCALE_USER_DEFAULT ist in der Unit Windows deklariert.

Hedge 23. Jan 2009 14:36

Re: HTML parsen und in Excel 2007 Tabelle eintragen?
 
Ok damit tritt der Fehler zumindest nicht mehr auf..aber der folgende Code wirft eine Exception:

Delphi-Quellcode:
    // Variabeln für die Verbindung zu Excel initialisieren
  excelApp              := TExcelApplication.Create(Self);
  excelBook             := TExcelWorkbook.Create(Self);
  excelSheet            := TExcelWorksheet.Create(Self);
  // Verbindungsart zu Excel festlegen.
  excelApp.ConnectKind  := ckRunningInstance;
  excelBook.ConnectKind := ckRunningInstance;
  excelSheet.ConnectKind := ckRunningInstance;
  // Diese ID wird zur Komunikation mit Excel benötigt.
  lcid            := LOCALE_USER_DEFAULT;


  excelSheet.Range['A2','A2'].Select;
  excelSheet.Cells.Item[1,1].Value;
Project blub.exe raised exception class EOleSysError with message 'Unable to retrieve pointer to a running object registered with OLE for Excel.Sheet/{4545987-jedemengezahlen-84385}'.

nahpets 23. Jan 2009 14:49

Re: HTML parsen und in Excel 2007 Tabelle eintragen?
 
Hallo,

schön und wo wirft er die Exception (Zeile)?

Die Fehlermeldung klingt so, als könnte es da in der Gegend ein Problem geben:
Delphi-Quellcode:
excelApp.ConnectKind  := ckRunningInstance;
excelBook.ConnectKind := ckRunningInstance;
excelSheet.ConnectKind := ckRunningInstance;
Zugegeben: Mein Code ist mit Delphi6 geschrieben und läuft momentan gegen Excel 2003 SP2.
Du nutzt eine neuere Excelversion und höchstwahrscheinlich auch eine neuer Delphiversion (gib' die doch mal in Deinem Profil ein), da gibt es keine Garantie, dass da noch irgendwas unverändert funktioniert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 Uhr.
Seite 1 von 2  1 2      

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