Delphi-PRAXiS

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.

Hedge 23. Jan 2009 14:53

Re: HTML parsen und in Excel 2007 Tabelle eintragen?
 
Bei der Zeile schmeißt er die Exception:

Delphi-Quellcode:
excelSheet.Range['A2','A2'].Select;
Das mit runningInstance habe ich gemacht damit ich halt auf den laufenden Excel-Prozess zugreifen kann.

nahpets 23. Jan 2009 15:02

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

nichtsdestotrotz: Dei Fehlermeldung klingt mir so, als hätte er damit ein Problem.
Versuch bitte erstmal, ob's mit 'ner neuen Instanz geht.

Hats Du in Deinem Quelltext irgendwas in der Form?
Delphi-Quellcode:
...
    ea.Connect;
...
    // Neue Arbeitsmappe aufmachen.
    ea.Workbooks.Add(EmptyParam,lcid);
    // Verbindung zur aktiven Arbeitsmappe herstellen.
    ewb.ConnectTo(ea.ActiveWorkbook);
    // Verbindung zur ersten Tabelle aufbauen.
    ews1.ConnectTo(ea.Worksheets.Item[1] As _WorkSheet);
    // Tabelle aktivieren.
    ews1.Activate;
Willst Du auf die Exceltabelle zugreifen, die gerade in Excel offen ist?
Da hab' ich zugegebenermaßen keine Ahnung, wie und ob das geht.

Hedge 7. Feb 2009 20:56

Re: HTML parsen und in Excel 2007 Tabelle eintragen?
 
Sorry, dass so lange nix kam, hatte auf Arbeit ziemlich Trouble :/

Zitat:

Willst Du auf die Exceltabelle zugreifen, die gerade in Excel offen ist?
Da hab' ich zugegebenermaßen keine Ahnung, wie und ob das geht.
Ja genau, aber fürs Erste wäre ein lauffähiges Beispiel Gold wert. Egal was es macht (in die Tabelle schreiben oder davon lesen). Von da aus, kann ich ja selbst rausfinden wie das mit der offenen Instanz ist.

Hab mein Vorhaben mal mit der alten Excel-API realisiert und das war um ein Vielfdaches einfacher .


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:51 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-2025 by Thomas Breitkreuz