SAS 使用 DDE 保护 Excel 工作表
SAS protect Excel worksheet with DDE
我想使用 SAS 使用 DDE 操作现有 Excel sheet:
我有以下代码(注意!由于 Excel 中的德语设置,我使用 z 表示 r(ows) 和 s 表示 c(columns)):
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;
现在我想用密码保护 sheet Daten
并激活选项 use autofilter
。有什么想法可以实现吗?
我在这里的建议是编写一个宏来完成您想要做的事情(这里的两个问题都是真的),然后如果您必须使用 DDE,则使用 DDE 调用该宏。这比使用 DDE 做每一件小事要容易得多,而且更容易维护(而且当你最终离开 DDE 时更便携)。
如果你这样做,那么你的宏代码就没有所有额外的 SAS 语言位,并且可以更容易 read/maintained(即使是由 VBA 开发人员而不是SAS 开发人员),SAS 只调用宏,这很容易做到。
DDE 是一项不再得到很好支持的旧技术,新开发应尽可能远离它。
我想使用 SAS 使用 DDE 操作现有 Excel sheet:
我有以下代码(注意!由于 Excel 中的德语设置,我使用 z 表示 r(ows) 和 s 表示 c(columns)):
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;
现在我想用密码保护 sheet Daten
并激活选项 use autofilter
。有什么想法可以实现吗?
我在这里的建议是编写一个宏来完成您想要做的事情(这里的两个问题都是真的),然后如果您必须使用 DDE,则使用 DDE 调用该宏。这比使用 DDE 做每一件小事要容易得多,而且更容易维护(而且当你最终离开 DDE 时更便携)。
如果你这样做,那么你的宏代码就没有所有额外的 SAS 语言位,并且可以更容易 read/maintained(即使是由 VBA 开发人员而不是SAS 开发人员),SAS 只调用宏,这很容易做到。
DDE 是一项不再得到很好支持的旧技术,新开发应尽可能远离它。