okay, I had a major wrestling match today when attempting to allow my users to automatically save or download a dynamically generated Excel spreadsheet, so thought I'd share the details in case it helps someone else save some hair pulling.
The Scenario
You have a page with a link on it. Clicking this link produces a popup window, the code behind it querying a database, writing an excel file to disk, setting the content headers, and then prompting the user to open or save the file.
The Symptoms
In IE (i'm using version 8), your user clicks the link to "Export Data", popup window appears, and then promptly closes without so much as a "how do you do". (in other browsers, such as Chrome and Firefox, everything behaves just like it should; user clicks link, popup appears, user is immediately prompted to either open or save the file)
The Solution
After trying all MANNER of values for headers, it turns out the magic combo for making it work (in my case, anyway) had two parts to it:
1. DO cache the content. This is accomplished by making sure you DO NOT have a "Pragma: no-cache" header, and including a header like this: Expires: Thu, 01 Dec 2010 16:00:00 GMT (or any other future date...perhaps you could automatically calculate it to be one minute in the future or something). Seems that IE, if you have said NOT to cache content, can't find the file by the time it gets to the dialog because it already uncached it. Strange behavior, but true.
2. Check your browser settings to ensure that you have "Automatic prompting for file downloads" ENABLED. By default it is DISABLED. Here's a screenshot of that setting to help you locate it:

After I did those two things, my download link behaved as it did in the other browsers I tested.
Just for clarification, here are the headers and values I ended up with (this is PHP code, so just deal with it):
header ("Content-type: application/vnd.ms-excel"); Okay, that's it. Hope it helps someone else save some time. Doug out
header ("Content-Disposition: attachment; filename=".$tmpfilename);
header ("Expires: Thu, 01 Dec 2010 16:00:00 GMT");

