Marc Schwarz: Auf Excel Datei zugreifen...

Hallo Zusammen

Ich muss Werte aus einer Excel Datei mit ASP abgreifen können. Das funktioniert ja ganz gut, wenn ich die Excel Datei wie eine Datenbank abfrage...

Das Problem ist nur: Verweise, Formeln und Funktionen funktionieren ja so nicht, weshalb ich die Werte nicht erhalte.

Die Excel Datei ist ziemlich kompliziert mit mehreren Arbeitsblättern, Verweise über Arbeitsblätter hinweg und tausende von Formeln bei denen etwas Berrechnet wird. Genau dieses Endergebnis müsste ich haben. Aber wie gesagt, all diese Formeln werden ja bei einem normalen ODBC Zugriff nicht verarbeitet.

Hat jemand eine Idee?
Gruss Marc

  1. Halihallo Marc

    Die Excel Datei ist ziemlich kompliziert mit mehreren Arbeitsblättern, Verweise über Arbeitsblätter hinweg und tausende von Formeln bei denen etwas Berrechnet wird. Genau dieses Endergebnis müsste ich haben. Aber wie gesagt, all diese Formeln werden ja bei einem normalen ODBC Zugriff nicht verarbeitet.

    Nun ja. Um eine Excel-Datei zu verarbeiten dürfte wohl Excel am
    besten sein. Und wie normal bei Microsoft lassen sie dir immer
    irgendwelche Hintertürchen offen. Dieses Hintertürchen heisst OLE und
    COM.

    Etwas konkreter:

    excelInstance = Server.CreateObject("Excel.Application")

    Was man dann mit diesem excelInstance alles tun kann steht wohl alles
    in der VBA-Dokumentation deines Excels (das macht nämlich (fast)
    genau das selbe). Oder suche einfach nach "Excel OLE", da siehst du
    dann ein paar Beispiele (wenn auch in anderen Sprachen, aber die
    Klasse bleibt genau die gleiche).

    Viele Grüsse

    Philipp

    1. Hallo Philipp

      Das klappte so tatsächlich! Aber leider nur gleich zu beginn. Nachdem ich nun den PC neugestartet habe (mehrmals) und ich die Seite wieder aufrufe, bleibt die Seite weiss. Es ertönt ein kurzes Pling, aber ohne Fehlermeldung. Die Seite reagiert dann nicht mehr.

      Wenn ich eine andere Excel Datei öffne, funktioniert es. Auch wenn ich einige Arbeitsblätter der Datei lösche, klappt es.

      Gibt es eine Möglichkeit, an die Fehlermeldung ranzukommen?

      Gruss Marc

      PS: Hier der Code

      set excel = Server.CreateObject("Excel.Application")
      set sheet = excel.workbooks.open("e:\xls\xls_4.xls")

      '* START SETZEN DER MIKRO WERTE *'
      set write_hed_mod = sheet.Worksheets("hed mod")
      write_hed_mod.cells(745, 2).value = 5
      write_hed_mod.cells(746, 2).value = 4
      set write_hed_mod = nothing
      '* ENDE SETZEN DER MIKRO WERTE *'

      set hed_mod = sheet.Worksheets("hed mod")
      Response.Write(hed_mod.cells(745, 2))
      set hed_mod = nothing
      set sheet = nothing
      set excel = nothing

      Halihallo Marc

      Die Excel Datei ist ziemlich kompliziert mit mehreren Arbeitsblättern, Verweise über Arbeitsblätter hinweg und tausende von Formeln bei denen etwas Berrechnet wird. Genau dieses Endergebnis müsste ich haben. Aber wie gesagt, all diese Formeln werden ja bei einem normalen ODBC Zugriff nicht verarbeitet.

      Nun ja. Um eine Excel-Datei zu verarbeiten dürfte wohl Excel am
      besten sein. Und wie normal bei Microsoft lassen sie dir immer
      irgendwelche Hintertürchen offen. Dieses Hintertürchen heisst OLE und
      COM.

      Etwas konkreter:

      excelInstance = Server.CreateObject("Excel.Application")

      Was man dann mit diesem excelInstance alles tun kann steht wohl alles
      in der VBA-Dokumentation deines Excels (das macht nämlich (fast)
      genau das selbe). Oder suche einfach nach "Excel OLE", da siehst du
      dann ein paar Beispiele (wenn auch in anderen Sprachen, aber die
      Klasse bleibt genau die gleiche).

      Viele Grüsse

      Philipp

      1. Halihallo Marc

        Das klappte so tatsächlich! Aber leider nur gleich zu beginn. Nachdem ich nun den PC neugestartet habe (mehrmals) und ich die Seite wieder aufrufe, bleibt die Seite weiss. Es ertönt ein kurzes Pling, aber ohne Fehlermeldung. Die Seite reagiert dann nicht mehr.

        Uh? - Das Pling verwundert mich jetzt etwas :-)

        Nur eines habe ich gesehen:
        set hed_mod = sheet.Worksheets("hed mod")
        Response.Write(hed_mod.cells(745, 2))

        Bei der Ausgabe willst du wohl kaum das Object cells(745,2) ausgeben,
        sondern den Wert dieser Zelle. => .value anfügen:

        Response.Write(hed_mod.cells(745, 2).value)

        Wenn ich eine andere Excel Datei öffne, funktioniert es. Auch wenn ich einige Arbeitsblätter der Datei lösche, klappt es.

        Was passiert, wenn du die problematische Datei e:\xls\xls_4.xls mit
        Excel manuell öffnest? - Geht das? - Könnte sein, dass die Datei
        korrupt ist, wobei ich dies zwar für unwahrscheinlich halte.

        Gibt es eine Möglichkeit, an die Fehlermeldung ranzukommen?

        Es sollte per Default eine kommen, wenn ein Fehler über die COM-
        Schnittstelle gemeldet wird.

        Viele Grüsse

        Philipp