Über ASP ein Access-DB nach Excel exportieren
.:thomas:.
- asp.net
0 Frank aus Ulm0 .:thomas:.0 .:thomas:.
0 Stefan Falz
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.
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
Danke erstmal. I
Ich probiers mal aus und melde mich dann mit Sicherheit wieder :-)
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.
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
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
%>
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
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>
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
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