.:thomas:.: Über ASP ein Access-DB nach Excel exportieren

Hallo,
ich versuche über eine ASP Seite die angezeigten Felder (von einer Access-DB) nach einer Excel Tabelle zu exportieren. Aber so einfach scheint das gar nicht zu sein :-)

Kann mir jemand helfen?

Danke.

  1. Hi, hallo

    was für angezeigte Felder? Tabellenfelder, Formularfelder, Berichtsfelder, ...?

    ich nehme aber mal an Tabellendaten aus einer Access-Tabelle in ein Excel Worksheet... (Microsoft möge mir das Weglassen des Firmennamens vor den Produktnamen verzeihen)

    du mußt dazu ein COM-Objekt vom Typ Excel.Application initialisieren und über die Auflistungen .Workbooks / .Workbook / .Sheets  dich bis zur .Range vorarbeiten und dort mit 2 Laufvariablen arbeiten, die für die X (spalten) und Y (zeilen) Richtung im Excel-Sheet stehen.

    Ich hoffe, nachstehendes Beispiel hilft dir.

    set xls_app = CreateObject("Excel.Application")
    set xls_books = xls_app.Workbooks
    set xls_book = xls_books.Open("C:\test.xls")
    '===== Excel geöffnet und neues Arbeitsfile geladen ======
    set sheet1 = xls_book.Sheets(1)
    sheet1.Activate
    sheet1.Range("A1").Value = "Test"

    startrow = 4
    set rs_sql = conn.execute("SELECT ID,Titel,Bemerkung FROM tabelle1")
    Do Until rs_sql.EOF
      sheet1.Range(CStr("A" & startrow)).Value = CStr(rs_sql("ID").Value)
      sheet1.Range(CStr("B" & startrow)).Value = CStr(rs_sql("Titel").Value)
      sheet1.Range(CStr("C" & startrow)).Value = CStr(rs_sql("Bemerkung").Value)
      startrow = startrow + 1
      rs_sql.MoveNext
    Loop
    set rs_sql = nothing
    set sheet1 = nothing
    xls_book.save
    xls_book.close
    set xls_book = nothing
    set xls_books = nothing
    xls_app.quit
    set xls_app = nothing

    Tschau, tschüß,
    Frank

    1. Danke erstmal. I
      Ich probiers mal aus und melde mich dann mit Sicherheit wieder :-)

    2. Hallo Frank,
      bei dem von dir aufgeführten Beispiel erhalte ich folgende Fehlermeldung: ActiveX component can't create object: 'Excel.Application'

      Kannst du mir da weiterhelfen? Danke.

      1. Hi, hallo

        klingt als hättest du kein MS Excel installiert?

        dann hilft wahrscheinlich nur noch der Tip von Stefan Falz über SELECT / INSERT INTO

        Tschau, tschüß,
        Frank

        1. Stimmt, aber da komme ich leider nicht ran. Der Tip von Stefan funktioniert, nur wie kann ich diese Datei anschließend gleich öffnen?
          und vielleicht noch etwas formatieren...?

          Danke.

          PS. Ich hänge mal den Sourcecode mit dran.

          <%
          ' --- Zusammenstellen der Datenbankverbindungsinformationen
          Dim strProvider
              strProvider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"
          Dim strDatabase
              strDatabase = "DATA SOURCE=" & Server.MapPath ("../") & "/test.mdb;"
          Dim strComplete
              strComplete = strProvider & strDatabase

          ' --- Öffnen der Datenbankverbindung
          Set objConn = Server.CreateObject("ADODB.Connection")
              objConn.open strComplete

          Tag = day(Date)
          Monat = month(Date)
          Jahr = year(Date)
          Sekunden = Second(Time)
          Minuten = Minute(Time)
          Stunden = hour(Time)

          datum = Tag&"_"&Monat&"_"&Jahr&"__"&Stunden&"_"&Minuten&"_"&Sekunden

          ' --- Angeben des Dateinamens des Excelsheets inkl. Pfadangabe.
          Dim xls_path
              xls_path = Server.MapPath("../") & "\test_"&datum&".xls"

          ' --- Es wird ein Export aller Daten aus der Access Tabelle "tblTest"
          ' --- in das Datenblatt "tabImport" der Exceldatei durchgeführt.
          ' --- Die doppelten und 3-fachen Anführungszeichen werden benötigt.
          ' --- Der fertige SQL-String sieht dann folgendermassen aus:
          ' --- SELECT * INTO [tabImport] IN "C:\inetpub\wwwroot\xls_test.xls" "EXCEL 5.0;" FROM tblTest
          ' --- Das sieht zwar etwas konfus aus, funktioniert aber einwandfrei.
              SQL = "SELECT * INTO [Tabelle1] IN """ & xls_path & """ ""EXCEL 5.0;"" FROM test_anlagenbuch"

          ' --- Ausführen des SQL-Statements
              objConn.Execute SQL

          ' --- Schliessen und terminieren der Datenbankverbindung.
              objConn.Close
          Set objConn = Nothing
          %>

          1. Hi, hallo

            Stimmt, aber da komme ich leider nicht ran. Der Tip von Stefan funktioniert, nur wie kann ich diese Datei anschließend gleich öffnen?
            und vielleicht noch etwas formatieren...?

            wenn du kein Excel (oder es gibt da wohl noch MS Office Web Components, hab ich aber noch nie mit gearbeitet) auf dem Server installiert hast, dann kannst du auch keine Excel-Datei öffnen und auch nicht formatieren.

            Zum vollen Zugriff auf alles in einem Excel-Sheet brauchst du zwingend die COM-Objekte von MS Excel.

            Sonst halt eben nur quick & dirty mit Stefans Trick.

            Tschau, tschüß,
            Frank

            1. Hallo,
              mittlerweile kann ich die Datei sogr öffnen, jetzt müsste ich sie nur noch ein wenig formatieren... Irgendwie muss das gehen, denn ich habe schon bei uns im Intranet gesehen, dass die funktioniert.

              Ich schick mal den Quellcode mit. Danke schon mal.

              <%
              Response.Buffer = True

              anlage = Request.Querystring("anlage")
              daten = Request.Querystring("daten")

              select_dat = Request.Form("select_dat")
              anzahl = Request.Form("anzahl")
              comets_nr = Request.Form("comets")

              IF select_dat = "25" THEN select_dat = "Top 25"
              IF select_dat = "50" THEN select_dat = "Top 50"
              IF select_dat = "100" THEN select_dat = "Top 100"
              IF select_dat = "500" THEN select_dat = "Top 500"
              IF select_dat = "1000" THEN select_dat = "Top 1000"
              IF select_dat = "5000" THEN select_dat = "Top 5000"
              IF select_dat = "alle" THEN select_dat = ""
              IF select_dat = "----------" THEN select_dat = "Top 25"

              IF  id = "ON" THEN id = "id, " ELSE id = ""
              IF  anzahl = "ON" THEN anzahl = "anzahl, " ELSE anzahl = ""
              IF comets_nr = "ON" THEN comets_nr = "comets_nr, " ELSE comets_nr = ""

              ' --- Zusammenstellen der Datenbankverbindungsinformationen
              Dim strProvider
                  strProvider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"
              Dim strDatabase
                  strDatabase = "DATA SOURCE=" & Server.MapPath ("../") & "/test.mdb;"
              Dim strComplete
                  strComplete = strProvider & strDatabase

              ' --- Öffnen der Datenbankverbindung
              Set objConn = Server.CreateObject("ADODB.Connection")
                  objConn.open strComplete

              Tag = day(Date)
              Monat = month(Date)
              Jahr = year(Date)
              Sekunden = Second(Time)
              Minuten = Minute(Time)
              Stunden = hour(Time)

              datum = Tag&"_"&Monat&"_"&Jahr&"__"&Stunden&"_"&Minuten&"_"&Sekunden

              ' --- Angeben des Dateinamens des Excelsheets inkl. Pfadangabe.
              Dim xls_path
                  xls_path = Server.MapPath("../excel") & "\test_"&datum&".xls"

              ' --- Das sieht zwar etwas konfus aus, funktioniert aber einwandfrei.
                  SQL = "SELECT "&select_dat&" anlage, "&anzahl&comets_nr&id&" los_nr INTO [Tabelle1] IN """ & xls_path & """ ""EXCEL 5.0;"" FROM test_anlagenbuch WHERE anlage='"&anlage&"'"

              'Response.Write(SQL)

              ' --- Ausführen des SQL-Statements
                  objConn.Execute SQL

              ' --- Schliessen und terminieren der Datenbankverbindung.
                  objConn.Close
              Set objConn = Nothing
              %>
              <p align="center"> 
              <p align="center">
              <button type="button" accesskey="E" runat="server" type="button" onClick="top.location='../excel/test_<%=datum%>.xls'"><u>E</u>xcel Datei öffnen</button>
              </p>
              <p align="center"> 
              <button type="button" accesskey="X" runat="server" type="button" onClick="self.location='excel3.asp?anlage=<%=anlage%>&daten=<%=daten%>&datei=test_<%=datum%>.xls'">E<u>x</u>cel Datei auf dem Server löschen<br>und zurück zum Anlagenbuch</button></p>

              1. Hi, hallo

                äh, btw, wegen mir brauchst du nicht immer deinen Quelltext mitposten

                mittlerweile kann ich die Datei sogr öffnen, jetzt müsste ich sie nur noch ein wenig formatieren... Irgendwie muss das gehen, denn ich habe schon bei uns im Intranet gesehen, dass die funktioniert.

                WOMIT öffnest du die, über den Link, den du unten in HTML deklariert hast? Dann hat das nix mehr mit dem Server zu tun sondern du lädst die .xls vom Server zu dir und öffnest sie bei dir lokal aus den temporären Internet Dateien, dass das so schön im Browser geht, daran ist das Microsoft Office Plugin schuld, welches Excel in deinem Browser startet.

                Ansonsten seh ich in deinem Quelltext kein Kommando, was die Datei auf dem Server öffnet.

                Tschau, tschüß,
                Frank

  2. Hallo,

    ich versuche über eine ASP Seite die angezeigten Felder (von einer Access-DB) nach einer Excel Tabelle zu exportieren. Aber so einfach scheint das gar nicht zu sein :-)

    evtl. hilft: http://www.aspfaq.de/index.asp?FID=97&ELE=8443

    Tschau, Stefan