0

我正在尝试从 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;

所以我得到一个文件名“文件”,其中包含 3 张纸、月、年和日。导出文件后,我在 Excel 文件中添加了 3 个表格,每个表格分别代表年、月和日,并将表格命名为 day1、month1 和 year1。之后,我隐藏了工作表年、月和日,以便用户只能看到工作表 day1、month1 和 year1 中的图表。该文件每天都会从 SAS 中导出。第二天导出文件时,应该隐藏的工作表不再隐藏而是可见。有没有办法使用 PROC 导出或任何其他程序隐藏工作表。请帮忙。

谢谢你 !

4

2 回答 2

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;
于 2013-12-04T00:00:13.073 回答
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;

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

于 2013-11-07T11:42:51.927 回答