Are you using SAS/IntrNet or a stored process? Basically, when you use _webout, you are using a pipeline that exists between a server and a client browser. That pipeline "knows" when you send regular content types like HTML and in some instances, TXT files or PDF files to the browser. And the browser "knows" how to deal with regular content types like HTML, TXT or PDF.
However with either SAS/IntrNet Application Dispatcher programs or Stored Processes, if you are sending non-HTML or you want to launch an application OTHER THAN the browser for rendering the file, you must send a content-type header down the pipeline, so the browser knows to launch a helper program for rendering.
In your instance, if you are generating ODS HTML, but you want Excel to launch instead of the browser, then you have to control the content-type header by using either the APPSRV_HEADER function (SAS/IntrNet) or the STPSRV_HEADER function (Stored Process).