从SAS导出格式化的Excel文件

时间:2013-11-05 15:09:29

标签: sql excel excel-vba sas enterprise-guide vba

我正在尝试从SAS EG导出excel文件。我使用下面的代码,它工作正常。

proc export dbms=excelcs
data= MONTH
 file="A:\D1\D2\FILE.xlsb" replace; 
 port=9621; 
 server="pwn59000.corp.ds.fedex.com"; 
  sheet='month'; 
run;

proc export dbms=excelcs
data= DAY
 file="A:\D1\D2\FILE.xlsb" replace; 
 port=9621; 
 server="pwn59000.corp.ds.fedex.com"; 
  sheet='day'; 
run;

proc export dbms=excelcs
data= YEAR
 file="A:\D1\D2\FILE.xlsb" replace; 
 port=9621; 
 server="pwn59000.corp.ds.fedex.com"; 
  sheet='year'; 
run;

所以我得到一个文件名'FILE',包含3张,月,年和日。 导出文件后,我将另外3张工作表添加到excel文件中,每个工作表分别显示年,月和日,并将工作表命名为day1,month1和year1。之后,我将工作表年,月和日隐藏起来,以便用户只能看到工作表day1,month1和year1中的图表。此文件每天从SAS导出。当文件第二天导出时,应隐藏的工作表不再隐藏但可见。有没有办法使用PROC导出或任何其他过程隐藏工作表。请帮忙。

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以尝试将数据集导出为CSV文件,然后在每次打开Excel工作簿时使用excel中的数据连接将csv文件导入隐藏的工作表。

或者,尝试在SAS中使用libname statemet来引用excel文件:

libname xl pcfiles type=Excel unicode=yes port='YOURPORT' server='YOURSERVER' path = "YOURPATH\YOUREXCELFILE.xls" ;

然后通过

删除隐藏的工作表
proc datasets lib=xl;
delete HIDDENSHEETNAME;
run;

使用

重新插入新数据
data xl.HIDDENSHEETNAME;
set YOURDATA;
run;

当然,您需要为所有隐藏的工作表重复此操作。

答案 1 :(得分:0)

您可以使用DDE协议隐藏/取消隐藏(并执行许多其他有趣的事情)。 像这样:

首先我用3张

创建测试Excel文件
libname xlibr excel 'C:\Users\Dmitry\Google Drive\SAS\test.xlsx';
data xlibr.sheet1;
   set sashelp.class;
run;

data xlibr.sheet2;
    set sashelp.class;
run;

data xlibr.sheet3;
   set sashelp.class;
run;

libname xlibr clear;

现在我必须以编程方式打开Excel(如果它已经打开就可以了)

options noxwait noxsync;
filename sas2xls dde 'excel|system';

data _null_;
  length fid rc start stop time 8;
  fid=fopen('sas2xls','s');
  put fid=;
  if fid = 0 then do;
    rc=system('start excel');
    start=datetime();
    stop=start+10;
    do while(fid^=0);
        fid=fopen('sas2xls','s');
        put fid=;
        time=datetime();
        if time > stop then fid=0;
    end;
  end;
run;

现在我向Excel发送命令,实际模拟人类鼠标点击:

1)打开工作簿

2)隐藏Sheet1

3)关闭错误(保存并关闭文件,没有可能的弹出对话框)

4)保存

5)关闭文件

filename sas2xls dde 'excel|system';
data _null_;
    file sas2xls;
    put '[open("C:\Users\Dmitry\Google Drive\SAS\test.xlsx")]';
    put '[workbook.hide("Sheet1")]';
    put '[error(false)]';
    put '[save()]';
    put '[file.close(false)]';
run;