如果比较懂wordbasic(早期的VBA)的话,可以参考下列代码来实现,非常繁琐,只是有新建表格,但没有插入已存在表格,要实现的话wordbasic的地方可能需要改一下,具体要请教wordbasic高手了。由于表格需要格式设置,因此需要写入wordbasic,让word来执行这段宏。
这类功能一般会使用处理输出比较普遍的动态数据交换引擎(DDE)来实现。
- options noxwait xmin noxsync;
- /*启动officeword*/
- x '"C:\Program Files\Microsoft Office\OFFICE11\WINWORD.EXE"';
- filename wrd dde 'winword|system';
- /*设置doc所在目录*/
- %let path=_;
- /*由于使用之前x命令与SAS并不是串行,而是并发的多线程,因此这里需要sleep,目的等待启动word编辑器*/
- data _null_;
- call sleep(1,3);
- run;
- data _null_;
- file wrd;
- put '[FileNew.Template="Normal.dot"]';
- put '[ChDefaultDir "&path",0]';
- put '[FileSaveAs.Name="test.doc",.Format=0]';
- run;
- /*构造了需要写入的表格*/
- data into_word;
- row=trim("sas")||'09'x||trim(put(today(),yymmdd10.));
- run;
- /*写入wordbasic*/
- data _null_;
- file wrd;
- set into_word;
- ddecmd='[Insert '!!quote(trim(row))!!']';
- put ddecmd;
- put '[EditSelectAll]';
- put '[TextToTable.ConvertFrom="1",
- .NumColumns="2",.NumRows="1",
- .InitialColWidth="Auto",
- .Format="35",.Apply="87"
- ]';
- put '[FileSave]';
- put '[FileClose 2]';
- put '[FileClose 2]';
- run;
复制代码这个比较可控,可以实现打开已有doc文档,对已有表格进行编辑,包括高级的word的编辑功能。不过前提还是需要非常熟悉VBA。