<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Stored process writing to the browser and excelxp tagset in Developers</title>
    <link>https://communities.sas.com/t5/Developers/Stored-process-writing-to-the-browser-and-excelxp-tagset/m-p/152829#M4138</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am trying to have a stored process write to the browser some javascript function before generating an Excel file using excelXP tagset. It seems to work on chrome but I get an issue&amp;nbsp; with IE. The stored process basically write my first data step to the beginning of the excel file. I&amp;nbsp; don't understand why because I redirect the code to Excel only after my first data step.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* First data step to write to the browser*/&lt;/P&gt;&lt;P&gt;&amp;nbsp; data _null_;&lt;/P&gt;&lt;P&gt;&amp;nbsp; file _webout;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; put "&amp;lt;script type='text/javascript' src='&lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"&gt;http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js&lt;/A&gt;&lt;SPAN&gt;'&amp;gt;&amp;lt;/script&amp;gt;";&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; put"&amp;lt;script type='text/javascript'&amp;gt;"; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; put"function detectIE() {"; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put"var ua = window.navigator.userAgent;"; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put"var msie = ua.indexOf('MSIE ');"; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put"var trident = ua.indexOf('Trident/');"; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put"if (msie &amp;gt; 0) {"; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put" // IE 10 or older =&amp;gt; return version number"; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put"return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);"; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put"}"; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put"else if (trident &amp;gt; 0) {"; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put"// IE 11 (or newer) =&amp;gt; return version number"; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put"var rv = ua.indexOf('rv:');"; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put"return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);"; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put"}"; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; put"else {"; &lt;/P&gt;&lt;P&gt;&amp;nbsp; put"window.stop();"; &lt;/P&gt;&lt;P&gt;&amp;nbsp; put"document.execCommand('Stop');"; &lt;/P&gt;&lt;P&gt;&amp;nbsp; put"alert('Please use Internet Explorer');"; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; put"newWindow = window.open('', '_self', '');"; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; put"window.close(newWindow);"; &lt;/P&gt;&lt;P&gt;&amp;nbsp; put" // other browser"; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put"return false;"; &lt;/P&gt;&lt;P&gt;&amp;nbsp; put"}"; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; put"}"; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; put"window.onpaint = detectIE();"; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; put '&amp;lt;/script&amp;gt;'; &lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* Then I redirect the Excel for the Excelxp tagset*/&lt;/P&gt;&lt;P&gt;%let RV=%sysfunc(stpsrv_header(Content-type,application/vnd.ms-excel)); &lt;/P&gt;&lt;P&gt;%let RV=%sysfunc(stpsrv_header(Content-disposition,attachment; filename= Histostaffperformance.xml));&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ODS listing close; &lt;/P&gt;&lt;P&gt;ODS noresults;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ODS tagsets.ExcelXP &lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; file=_webout&lt;/P&gt;&lt;P&gt;&amp;nbsp; STYLE=SRReportStyle_custom2&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; options&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (Embedded_titles = 'yes'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Embedded_Footnotes&amp;nbsp;&amp;nbsp; = 'yes'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sheet_name= 'Histo_performance'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; autofilter= 'yes'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; frozen_headers= '3'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; autofit_height= 'yes'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; absolute_column_width= '20,20,15,30,13'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ); &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TITLE1 j=l color=cxF8971D h=14pt bold "Histology - Staff Performance";&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PROC REPORT DATA=all NOWD style(Header)=[just=center ]; &lt;/P&gt;&lt;P&gt;COLUMN&amp;nbsp; taskdate histotech testtype steps count;&lt;/P&gt;&lt;P&gt;DEFINE Taskdate&amp;nbsp; /CENTER 'Date'&amp;nbsp; ; &lt;/P&gt;&lt;P&gt;DEFINE histotech /CENTER "Histotech"&amp;nbsp;&amp;nbsp; ;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;DEFINE testtype /CENTER "Test Type"&amp;nbsp;&amp;nbsp; ;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;DEFINE steps /CENTER "Step"&amp;nbsp;&amp;nbsp; ;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;DEFINE count /CENTER "# cases"&amp;nbsp;&amp;nbsp; ;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;RUN; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; ods tagsets.excelxp close;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; ods listing;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 22 Mar 2014 00:16:37 GMT</pubDate>
    <dc:creator>mrom34</dc:creator>
    <dc:date>2014-03-22T00:16:37Z</dc:date>
    <item>
      <title>Stored process writing to the browser and excelxp tagset</title>
      <link>https://communities.sas.com/t5/Developers/Stored-process-writing-to-the-browser-and-excelxp-tagset/m-p/152829#M4138</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am trying to have a stored process write to the browser some javascript function before generating an Excel file using excelXP tagset. It seems to work on chrome but I get an issue&amp;nbsp; with IE. The stored process basically write my first data step to the beginning of the excel file. I&amp;nbsp; don't understand why because I redirect the code to Excel only after my first data step.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* First data step to write to the browser*/&lt;/P&gt;&lt;P&gt;&amp;nbsp; data _null_;&lt;/P&gt;&lt;P&gt;&amp;nbsp; file _webout;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; put "&amp;lt;script type='text/javascript' src='&lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"&gt;http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js&lt;/A&gt;&lt;SPAN&gt;'&amp;gt;&amp;lt;/script&amp;gt;";&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; put"&amp;lt;script type='text/javascript'&amp;gt;"; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; put"function detectIE() {"; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put"var ua = window.navigator.userAgent;"; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put"var msie = ua.indexOf('MSIE ');"; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put"var trident = ua.indexOf('Trident/');"; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put"if (msie &amp;gt; 0) {"; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put" // IE 10 or older =&amp;gt; return version number"; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put"return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);"; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put"}"; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put"else if (trident &amp;gt; 0) {"; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put"// IE 11 (or newer) =&amp;gt; return version number"; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put"var rv = ua.indexOf('rv:');"; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put"return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);"; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put"}"; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; put"else {"; &lt;/P&gt;&lt;P&gt;&amp;nbsp; put"window.stop();"; &lt;/P&gt;&lt;P&gt;&amp;nbsp; put"document.execCommand('Stop');"; &lt;/P&gt;&lt;P&gt;&amp;nbsp; put"alert('Please use Internet Explorer');"; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; put"newWindow = window.open('', '_self', '');"; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; put"window.close(newWindow);"; &lt;/P&gt;&lt;P&gt;&amp;nbsp; put" // other browser"; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put"return false;"; &lt;/P&gt;&lt;P&gt;&amp;nbsp; put"}"; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; put"}"; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; put"window.onpaint = detectIE();"; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; put '&amp;lt;/script&amp;gt;'; &lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* Then I redirect the Excel for the Excelxp tagset*/&lt;/P&gt;&lt;P&gt;%let RV=%sysfunc(stpsrv_header(Content-type,application/vnd.ms-excel)); &lt;/P&gt;&lt;P&gt;%let RV=%sysfunc(stpsrv_header(Content-disposition,attachment; filename= Histostaffperformance.xml));&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ODS listing close; &lt;/P&gt;&lt;P&gt;ODS noresults;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ODS tagsets.ExcelXP &lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; file=_webout&lt;/P&gt;&lt;P&gt;&amp;nbsp; STYLE=SRReportStyle_custom2&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; options&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (Embedded_titles = 'yes'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Embedded_Footnotes&amp;nbsp;&amp;nbsp; = 'yes'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sheet_name= 'Histo_performance'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; autofilter= 'yes'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; frozen_headers= '3'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; autofit_height= 'yes'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; absolute_column_width= '20,20,15,30,13'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ); &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TITLE1 j=l color=cxF8971D h=14pt bold "Histology - Staff Performance";&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PROC REPORT DATA=all NOWD style(Header)=[just=center ]; &lt;/P&gt;&lt;P&gt;COLUMN&amp;nbsp; taskdate histotech testtype steps count;&lt;/P&gt;&lt;P&gt;DEFINE Taskdate&amp;nbsp; /CENTER 'Date'&amp;nbsp; ; &lt;/P&gt;&lt;P&gt;DEFINE histotech /CENTER "Histotech"&amp;nbsp;&amp;nbsp; ;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;DEFINE testtype /CENTER "Test Type"&amp;nbsp;&amp;nbsp; ;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;DEFINE steps /CENTER "Step"&amp;nbsp;&amp;nbsp; ;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;DEFINE count /CENTER "# cases"&amp;nbsp;&amp;nbsp; ;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;RUN; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; ods tagsets.excelxp close;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; ods listing;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 22 Mar 2014 00:16:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Developers/Stored-process-writing-to-the-browser-and-excelxp-tagset/m-p/152829#M4138</guid>
      <dc:creator>mrom34</dc:creator>
      <dc:date>2014-03-22T00:16:37Z</dc:date>
    </item>
    <item>
      <title>Re: Stored process writing to the browser and excelxp tagset</title>
      <link>https://communities.sas.com/t5/Developers/Stored-process-writing-to-the-browser-and-excelxp-tagset/m-p/152830#M4139</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You are sending data to _webout that is a basic html approach, the standard with SAS/Intrnet.&lt;/P&gt;&lt;P&gt;What is happening that html-headers and trailers are automatic added in this process. &lt;BR /&gt;You have to think/design of a html when you are splitting it up as you have done now. &lt;/P&gt;&lt;P&gt;&lt;A href="http://support.sas.com/documentation/cdl/en/stpug/62758/HTML/default/viewer.htm#httphead.htm" title="http://support.sas.com/documentation/cdl/en/stpug/62758/HTML/default/viewer.htm#httphead.htm"&gt;SAS(R) 9.3 Stored Processes: Developer's Guide&lt;/A&gt; (SAS(R) 9.3 Stored Processes: Developer's Guide&amp;nbsp; http headers)&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 22 Mar 2014 07:26:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Developers/Stored-process-writing-to-the-browser-and-excelxp-tagset/m-p/152830#M4139</guid>
      <dc:creator>jakarman</dc:creator>
      <dc:date>2014-03-22T07:26:01Z</dc:date>
    </item>
    <item>
      <title>Re: Stored process writing to the browser and excelxp tagset</title>
      <link>https://communities.sas.com/t5/Developers/Stored-process-writing-to-the-browser-and-excelxp-tagset/m-p/152831#M4140</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks Jaap. I am not sure if what I am trying to do is actually possible. It looks like MIME header are sent to the browser before the data. I don't think I can use multiple MIME header in my program&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 22 Mar 2014 23:15:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Developers/Stored-process-writing-to-the-browser-and-excelxp-tagset/m-p/152831#M4140</guid>
      <dc:creator>mrom34</dc:creator>
      <dc:date>2014-03-22T23:15:17Z</dc:date>
    </item>
    <item>
      <title>Re: Stored process writing to the browser and excelxp tagset</title>
      <link>https://communities.sas.com/t5/Developers/Stored-process-writing-to-the-browser-and-excelxp-tagset/m-p/152832#M4141</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Of course you can achieve what you want the question is how.&lt;/P&gt;&lt;P&gt;The stpsrv_header is one option to influence the header.&lt;/P&gt;&lt;P&gt;ODS is full wiht this &lt;A href="http://support.sas.com/documentation/cdl/en/odsug/66611/HTML/default/viewer.htm#p0hcv8gpxqebnpn1is52we2enltx.htm" title="http://support.sas.com/documentation/cdl/en/odsug/66611/HTML/default/viewer.htm#p0hcv8gpxqebnpn1is52we2enltx.htm"&gt;SAS(R) 9.4 Output Delivery System: User's Guide, Second Edition&lt;/A&gt;&lt;/P&gt;&lt;P&gt;no_top_matter no_bottom_matter are the keywords to get a full correct HTML-stream.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 23 Mar 2014 09:17:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Developers/Stored-process-writing-to-the-browser-and-excelxp-tagset/m-p/152832#M4141</guid>
      <dc:creator>jakarman</dc:creator>
      <dc:date>2014-03-23T09:17:14Z</dc:date>
    </item>
    <item>
      <title>Re: Stored process writing to the browser and excelxp tagset</title>
      <link>https://communities.sas.com/t5/Developers/Stored-process-writing-to-the-browser-and-excelxp-tagset/m-p/152833#M4142</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi mrom34,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;What you're doing is possible. I've done something very similar a number of times and know exactly what you're talking about with IE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm assuming what you are after is a 'Would you to open or save this spreadsheet file' type response from your browser when you run your stored process. If this is the case, from my understanding IE especially insists that any MIME content is displayed standalone in an iframe or its own window. Browsers generally won't allow you to reset the header halfway through the transmission of the page, as you're doing above. You're correct - you can't use multiple MIME headers. This is set at the beginning of your _webout stream.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have a couple of suggestions for you, and these assume that the program is to be used by multiple users concurrently:&lt;/P&gt;&lt;P&gt;- firstly, make this a stored process that recursively calls itself, and works in a way that outputs the HTML if certain (or no) parameters are passed,&amp;nbsp; and outputs your mime headers and the ODS markup if another paremeter is present. Let me explain with some pseudocode (only the second half is real code):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;* if no filenameParameter parameter is passed to this stored process;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%if (%length(&amp;amp;filenameParameter &amp;lt; 3)&lt;STRONG&gt;&lt;EM&gt; (or symexist, or whatever works for you)&lt;/EM&gt;&lt;/STRONG&gt;) do;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; myTempFilename = fn || ranuni() || '.xls'; &lt;STRONG&gt;* generate a random filename string with whatever method you choose ;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; ods tagsets file=myTempFilename;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;&amp;nbsp; * write the temporary generated excel filename to disk somewhere in a temp location;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;&amp;nbsp; * output the put statements above to _webout;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;&amp;nbsp; * then output something like this html, no need for a popup;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; put '&amp;lt;iframe src="myserver/SASStoredProcess/do?_program=/myDownloader?filenameParameter=' || myTempFilename || ' "&amp;gt;&amp;lt;/iframe&amp;gt;';&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;end;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;&lt;BR /&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;* if the filename paremeter is present, which it will be when called the second time via iframe reference above;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;else if length(filenameParameter &amp;gt; 3) then do;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff; padding-left: 30px;"&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; filename myFileInput="/myTempFileLocation/&amp;amp;filenameParameter..xml";&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff; padding-left: 30px;"&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; %let RV=%sysfunc(stpsrv_header(Content-type,application/vnd.ms-excel));&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff; padding-left: 30px;"&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; %let RV=%sysfunc(stpsrv_header(Content-disposition,attachment; filename= Histostaffperformance.xml)); &lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff; padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; data outmenow;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; length data $1;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; infile myFileInput recfm=n;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; file _webout recfm=n mod;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; input data $char1. @@;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; put data $char1. @@;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff; padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff; padding-left: 30px;"&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG&gt;* here you can delete your file myfileinput so that the program cleans up after itself;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;end;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P&gt;This way, your program can take user parameters during the first run, use these to create your output file, and then send the browser an instruction to load that same temporary file as the only output of a stored process stream by calling itself again using that iframe reference and the unique temp file string which tells it this is a download request for a previously constructed file, and because the new request uses fresh mime headers and a simple stream of the file contents, it'll come up as a download request.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Also, rather than wrapping each line of your html/javascript in put statements, it's much easier to write any static code to a static file and read it out using data step. Something like:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; data _null_;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; infile myStaticCodeStoredSomewhere.js;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; file _webout;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; put _infile_;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;... will work well for the first half of your program, in place of the put statements. This way you also don't have to worry about quoting etc., and it's a lot easier to edit.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hope this helps you and anyone else trying to achieve something similar.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Nik&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 26 Apr 2014 15:58:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Developers/Stored-process-writing-to-the-browser-and-excelxp-tagset/m-p/152833#M4142</guid>
      <dc:creator>boemskats</dc:creator>
      <dc:date>2014-04-26T15:58:53Z</dc:date>
    </item>
  </channel>
</rss>

