我创建了一个存储过程,但我想将输出导出到Excel。我常用的导出语句在存储过程中不起作用。
%let _ODSDEST=none;
%STPBEGIN();
data x;
set sashelp.class;
run;
proc export data=x outfile = "//my documents/sp_test.xlsx" dbms=xlsx replace;
sheet="table1";
run;
* Begin EG generated code (do not edit this line);
;*';*";*/;quit;
%STPEND;
是否有一种方法可以让它在存储过程中工作?
让存储进程返回excel文件的一种方法是使用ODS输出标记集(实际上,在本例中它是excel将愉快打开的xml文件)。excelxp (xml) .
当你这样做的时候,你可以使用stpsrv_header来修改HTML头。第一个语句告诉浏览器用excel打开文件,第二个语句告诉浏览器文件名。我认为,为了使这个头修改工作,存储过程需要交付流结果,而不是包结果。但我可能错了。
当我在下面运行时,我从浏览器中得到一个文件下载对话框,允许我打开或保存文件。我从存储过程Web应用程序运行,但应该工作正常时,从信息传递门户调用。
%let _odsdest=tagsets.excelxp;
%let rc=%sysfunc(stpsrv_header(Content-type,application/vnd.ms-excel));
%let rc=%sysfunc(stpsrv_header(Content-disposition,attachment%str(;) filename=MyExcelFile.xls));
%stpbegin()
proc print data=sashelp.shoes (obs=&obs);
run;
%stpend()
您是否检查了您的拼写过程export和outfile='mypath/my documents/myoutpt.xlsx' dbms=xlsx或outfile='mypath/my documents/myoutpt.xls' dbms=xls??你也可以试试ODS
您也可以尝试将STP设置为流媒体web服务,删除%STPBEGIN
和%STPEND
宏,并使用此宏发送到_webout
: https://core.sasjs.io/mp__streamfile_8sas.html
这样做的好处是,您的代码随后也将在Viya上工作。