SAS使用DDE保护Excel工作表

时间:2017-11-14 09:16:47

标签: excel sas password-protection dde

我想使用SAS操作现有的Excel表格:

我有以下代码(小心!我使用z表示r(ows),s表示c(列)因为Excel中的德语设置):

option noxwait noxsync;
x call "C:\Program Files (x86)\Microsoft Office\Office15\EXCEL.EXE";

%let delay=5;

data _null_;
rc=sleep(&delay); 
run;

filename sas2xl dde 'excel|system';

data _null_;
rc=sleep(&delay);
run;

%let mapwkbk=H:\odstest.xlsx;

data _null_;
file sas2xl;
rc=sleep(&delay);
put '[open("' "&mapwkbk" '")]';
run;


filename random dde 'excel|Daten!z2s1:z100s3';
data _null_;
    set sashelp.class;
    file random;
    put name sex age;
run;


data _null_;
file sas2xl;
/*rc=sleep(&delay);*/
put '[workbook.select("Pivot")]';
put '[select("Z2S1")]';
put "[pivot.refresh()]"; 

put '[workbook.select("Daten")]';
put '[select("z1S2:z1s5")]';
put '[filter]';
put '[select("z1S10")]';
put '[filter]';

put '[column.width(0,"s1",false,1)]';
put '[column.width(0,"s6:s9",false,1)]';

put '[ActiveSheet.Protect("***")]';

put '[workbook.delete("Dim")]';


/*put "[save()]";*/
/*put "[quit()]";*/
run;

现在我想用密码保护工作表Daten并设置选项use autofilter处于活动状态。任何想法如何达到这个?

1 个答案:

答案 0 :(得分:2)

我的建议是编写一个宏来执行你想要做的事情(这里的两个问题都是真的),然后如果必须使用DDE则使用DDE调用该宏。这比使用DDE做的每件小事要容易得多,而且更容易维护(当你最终离开DDE时更容易携带)。

如果你这样做,那么你的宏代码并没有围绕它的所有额外的SAS语言位,并且可以更容易地读取/维护(甚至由VBA开发人员而不是SAS开发人员)和SAS只需调用容易做的宏。

DDE是一项旧技术,不再受到很好的支持,新的开发应尽可能远离它。