【问题标题】:Export formatted Excel file from SAS从 SAS 导出格式化的 Excel 文件
【发布时间】:2013-11-05 15:09:29
【问题描述】:

我正在尝试从 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 导出或任何其他程序隐藏工作表。请帮忙。

谢谢!

【问题讨论】:

  • 据我所知。我们使用 C# 实用程序发布流程 SAS Excel 导出来执行隐藏工作表等操作。
  • 我认为当前的工具不可能做到这一点。当ODS EXCEL 可用时,它可能是一种潜在的解决方法(据我所知,9.4 TSM1 中的预生产)。

标签: sql excel sas enterprise-guide vba


【解决方案1】:

您可以尝试将数据集导出为 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;

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

【讨论】:

    【解决方案2】:

    您可以使用 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;
    

    【讨论】:

      猜你喜欢
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      • 2014-10-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多