Hej. Har sökt efter en funktion för att hämta data ifrån en access databas och sedan genom ett ASP skript skapa ett exceldokument från en skapad fråga.
Hur gör man detta på ett vettigt sätt?
9 svar · 826 visningar · startad av mattiasnordin
Hej. Har sökt efter en funktion för att hämta data ifrån en access databas och sedan genom ett ASP skript skapa ett exceldokument från en skapad fråga.
Hur gör man detta på ett vettigt sätt?
Jag tycker det är lättast om man skapar ett excel-dokument mha excel/html. Dvs i det formatet som blir om man väljer att spara ett xl-dokument med "Spara som webbsida...". Det är som ett html-dokument med lite extra data.
Det är väldigt enkelt att rendera ut och sen behöver man bara sätta contenttype till:
Response.ContentType = "application/excel"
Det här kräver dock att klienten har Excel 2000 eller senare.
Jag provade att köra nedan. Det fungerar men inte perfekt.
<% 'response.write sSql
set rs = connect.execute(sSql)%>
<% subOutPutExcel %>
<% sub subOutPutExcel
' Save it as an .xsl document
Response.ContentType = "application/vnd.ms-excel"
' List all the chosen columns in the table
Response.Write "<table border=1><tr bgcolor=cccccc>"
For x = 0 to rs.Fields.Count-1
Response.Write "<td>" & rs.Fields(x).Name & " </td>"
Next
Response.Write "</tr>"
While Not rs.EOF
' List all the post in the selected columns
Response.Write "<tr>"
For y = 0 to rs.Fields.Count-1
Response.Write "<td>" & rs.Fields(y).Value & " </td>"
Next
Response.Write "</tr>"
rs.MoveNext
Wend
Response.Write "</table>"
end sub %>
Excelfilens namn blir samma namn som htmlsidan. Kan man påverka det?
Finns det något bättre sätt att lösa det hela på?
HEJ!
När jag gör excelfiler gör jag csv-filer, dvs en (komma)separerad fil med värden.
Först skapar jag en fil med FSO, och öppnar den.
Skriver sedan rad efter rad till Rs.EoF med TextStream, med komma, tab eller kolon exempelvis mellan varje rs-värde.
Denna fil skickar jag sedan med epost till mig.
När man öppnar den öppnas den automatiskt i Excel, och med värdena i respektive fält, om man valt rätt delimeter.
Jag provade att köra nedan. Det fungerar men inte perfekt.
Jag brukar göra så att jag skapar ett excel-dokoument EXAKT så jag vill ha det. Sparar dokumentet som webbsida. Öppnar dokumentet i en texteditor och klistrar in kod och sätter Do ... Loop-rader om så behövs osv.
Excelfilens namn blir samma namn som htmlsidan. Kan man påverka det?
Call Response.AddHeader("Content-Disposition", "attachment; filename=Report.xls")
tack toha. Det fungerar ju utmärkt!
mattiasnordin skrev:
Excelfilens namn blir samma namn som htmlsidan. Kan man påverka det?
Jag bumpar upp en gammal tråd.. kan man påverka namnet som ges som "förslag" när man ska spara excelfilen?
Tänkte använda samma .asp sida för att generera ut olika excel filer beroende på ett par variabler. Och då vore det bra om man kunde bestämma namnet på något sätt.
EDIT: Hittade svaret som är:
filenamenu = "filnamn-asdd"
Response.Addheader "Content-Disposition", "attachment;Filename=" & filenamenu & ".xls"
Har använd koden ovan, men får ett problem med att Excel arket blir oerhört stort, dvs mid dokument som är på ca 2-3000 rader blir 19MB, kan man få det mer komprimerat?
<%@ Language=VBScript %>
<%
Response.Buffer = True
Response.ContentType = "application/vnd.ms-excel"
Call Response.AddHeader("Content-Disposition", "attachment; filename=Report.xls")
%>
<table border="1">
<tr>
<th>Column A</th>
<th>Column B</th>
<th>Totals Column</th>
</tr>
<tr>
<td>4</td>
<td>3</td>
<td><font color="red">=sum(a2:b2)</font></td>
</tr>
<tr>
<td>2</td>
<td>1</td>
<td><font color="red">=sum(a3:b3)</font></td>
</tr>
</table>
Detta ger önskat resultat men den ger även "Action Canceled" som sida och det ser inte så snyggt ut!
Hur slipper jag det ?
Annars så var detta just det jag letade efter...