Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win


Exporting to a csv from ASP

Posted on 2003-11-13
Medium Priority
Last Modified: 2008-02-01
Hi all,
I have a web app that generates html reports.  After I generate the reports I go ahead and create a csv file for the reports behind the scenes and save the csv file on the server.  
On the report page, at the bottom, there's a button "export" that when a user clicks on it would bring up a "file download" dialog box and lets the user save the csv file on their machine.  This works fine on win 2000 but on windows 98 and window xp, the csv file gets opened within the browser.  Is there a way to prevent that from happening??

Here is the code for the "export" button....

<a href="../Reports/Exports/test.csv"><img type="image" alt="Export" src="../images/export.gif"></a>
Question by:fifo123
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions

Accepted Solution

Neil Thompson earned 200 total points
ID: 9742415
change the link to ="../Reports/Exports/spool.asp" then create this file in the Exports folder

file spool.asp

Dim Stream
Dim Contents
Dim FileName

FileName = "test.csv"
' ---------------------------------------------------------------------------------------------

Response.ContentType = "application/octet-stream"
Response.AddHeader "content-disposition", "attachment; filename=" & FileName
Set Stream = server.CreateObject("ADODB.Stream")
Stream.LoadFromFile Server.MapPath(FileName)
Contents = Stream.ReadText
Response.BinaryWrite Contents
Set Stream = Nothing

that should work


Author Comment

ID: 9743355
Hey Neil,
It's working but I have another issue.  I wanted to stay in the same page so instead of going to a spool.asp page, I reload the page by doing a submit to itself.  The "file download" dialog box comes up and I am able to save the file anywhere I want.  Now, the problem is, if I try to click on other buttons on my page such as a 'Print' or 'help' button, I get a javascript 'Access Denied' error message.  Please help...

Expert Comment

ID: 9745704

This problem does occur while exporting.
The safe way is to call a javascript function through you a href...like,
<a href="javascript:export();"><img type="image" alt="Export" src="../images/export.gif"></a>
in that function
You submit the values to spool.asp

In spool.asp you create a document and give the user file save as option...etcc..

After all ur work there redirect again to your parent asp page..using response.redirect

I think this will solve the problem
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.


Expert Comment

ID: 9746810
hi fifo,

In order to stay in the same page, follow the directives

1. In the hyperlink tag, instead of giving the URL, call a Javascript method, that infact submits the form to the href location.( spool.asp)
2. Add the following code in the spool.asp file
Response.ContentType = "application/octet-stream"
Response.AddHeader "content-disposition", "attachment; filename=test.csv"

If this is followed, on clicking the Export Image, the javascript function is called, which submits the form. As the form is submitted to a page with a content-type that IE cannot interpret, if would pop out the File Save as Dialog.


Author Comment

ID: 9748149
Thanks guys, but I still get the 'access denied' error message:
Here is the code I have:

function CheckForReport( )
   document.forms(0).action = "Export.asp"

<a href="javascript:CheckForReport();"><img type="image" alt="Export" src="../images/export_off.gif">

'' NOTE:  The csv file is already in the web server
option explicit
Response.Expires = -1500
Response.Buffer = true

dim Stream
dim Contents
dim strFileName
dim strFile            

strFile = Session.SessionID & ".csv"
strFileName = Server.MapPath("." & "\" & "exports\" & strFile)
Response.ContentType = "application/octet-stream"
Response.AddHeader "content-disposition", "attachment; filename=" & strFile
set Stream = server.CreateObject("ADODB.Stream")
Stream.Type = 1
Response.CharSet = "UTF-8"
Set Stream = Nothing


Expert Comment

ID: 12154749
This Question is now classified abandoned as no comment has been added to this question in more than 21 days.

I will leave the following recommendation on this question to the moderators in the Cleanup topic area:
    Accept: NeilT {http:#9742415}

Any objections should be posted here in the next 4 days. After that time, the question will be closed at the discretion of the moderator.

EE Cleanup Volunteer

Expert Comment

ID: 12833523
I'm getting the Error  As:

Error Type:
ADODB.Stream (0x800A0BBA)
File could not be opened.
/ASPProject/MaintenanceOld.asp, line 29

When i implemented your code in my asp page. Do i need to create test.csv in the folder where my asp page resides?

The code in my asp page looks like:

Dim objConn                                    '  Connection Object
Dim objCmd                                                                                  '  Command Object
Dim objRS                                    '  Recordset Object
Dim strSQL                                    '  SQL String to access the database
Dim strConnection                      '  Connection string to access the database
Dim i                                          '  Counter variable
Dim fs
Dim Stream
Dim Contents
Dim FileName
FileName = "test.csv"
Response.ContentType = "application/octet-stream"
Response.AddHeader "content-disposition", "attachment; filename=test.csv"
Set Stream = server.CreateObject("ADODB.Stream")
Stream.LoadFromFile Server.MapPath(FileName)
Contents = Stream.ReadText
Response.BinaryWrite Contents
Set Stream = Nothing

' -- Create objects
Set objConn = Server.CreateObject("ADODB.Connection")
Set objCmd = Server.CreateObject("ADODB.Command")

' -- Connection String Value
' -- Open the Connection
objConn.Open strConnection

' Execute the Stored Procedure
With objCmd
    .ActiveConnection = strConnection
    .CommandType = adCmdStoredProc
    .Commandtext  = "MaintenanceInfo"
    .Parameters.Append objCmd.CreateParameter("@CustomerNo",adVarChar,adParamInput,10,92541)
End with
 Set objRS = Server.CreateObject("ADODB.Recordset")
 Set objRS = objCmd.Execute
' -- Populate our Recordset with data
'set objRS = objConn.Execute (strSQL)

If (objRS.BOF and objRS.EOF) then
      response.write "No records found"
End if
' Begin HTML output
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

      <TITLE>Maintenance Sample.Accesing Data from the Database</TITLE>


      ' -- Output the Field Names as the first row in the table
      Response.Write "<TR BGCOLOR=""#CCCCCC"">"
      For i = 0 to objRS.Fields.Count - 1
            Response.Write "<TH><FONT FACE=""ARIAL"" SIZE=""2"">" & objRS.Fields(i).Name & "</FONT></TH>"
      Response.write "</TR>"
      ' -- Now output the contents of the Recordset
      Do While Not objRS.EOF
            ' -- output the contents
            Response.Write "<TR>"
            For i = 0 to objRS.Fields.Count - 1
                  Response.Write "<TD><FONT FACE=""ARIAL"" SIZE=""1"">" & objRS.Fields(i) & "</FONT></TD>"
            Response.write "</TR>"
            ' -- move to the next record

      set objRS = Nothing
      set objConn = Nothing



Neil Can you please let me know why am i getting this error..



Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I have helped a lot of people on EE with their coding sources and have enjoyed near about every minute of it. Sometimes it can get a little tedious but it is always a challenge and the one thing that I always say is:   The Exchange of informatio…
I was asked about the differences between classic ASP and ASP.NET, so let me put them down here, for reference: Let's make the introductions... Classic ASP was launched by Microsoft in 1998 and dynamically generate web pages upon user interact…
Sometimes it takes a new vantage point, apart from our everyday security practices, to truly see our Active Directory (AD) vulnerabilities. We get used to implementing the same techniques and checking the same areas for a breach. This pattern can re…
Want to learn how to record your desktop screen without having to use an outside camera. Click on this video and learn how to use the cool google extension called "Screencastify"! Step 1: Open a new google tab Step 2: Go to the left hand upper corn…

636 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question