If you stream the file yourself (with a
servlet) you can set whatever headers (Content-Type, Content-Disposition, ... ) you like.
There was a recent
thread in this or the servlet's forum that covered this, exact same issue.
If you want an example of a streaming servlet, go to:
http://simple.souther.us and look for SimpleStream.
In the example, I'm streaming image files from a directory under WEB-INF but the code would be the same for Excel, PDF, or any other type of binary file.