Проблемы с SAS DDE с Office 2010 - PullRequest
       55

Проблемы с SAS DDE с Office 2010

3 голосов
/ 08 февраля 2012

Когда я работал в Office 2007, мой сценарий SAS DDE заполнялся, сохранялся и закрывался файл Excel просто отлично.

Я недавно обновился до Office 2010, и население работает нормально ... но Excel останавливается насохранить диалоговое окно.Я должен вручную нажать кнопку Сохранить, чего раньше мне не нужно было делать.

Кто-нибудь знает, как решить эту проблему?

Коды, которые я использую:

filename commands DDE 'EXCEL|SYSTEM';
data _null_;
file commands;
put '[OPEN("pathtoexcelfile.xls")]';
run;

data _null_;
file commands;
put "[Save.as(""&saveas_Path.&saveas..xls"")]";
put "[Close]";
run;

Ответы [ 2 ]

4 голосов
/ 09 февраля 2012

Вам нужно добавить (0) в ваше закрытое заявление.Это говорит о том, что не запрашивать.

data _null_;
file commands;
put "[Save.as(""&saveas_Path.&saveas..xls"")]";
put "[Close(0)]";
run;

Это мой полный макрос (объясняет некоторые параметры типа документа):

/******************************************************************************
** PROGRAM:  MACRO.DDE_SAVE_AS.SAS
**
** DESCRIPTION: SAVES THE CURRENT EXCEL FILE.  IF THE FILE
**              ALREADY EXISTS IT WILL BE OVERWRITTEN.
**
** PARAMETERS: iSAVEAS: THE DESTINATION FILENAME TO SAVE TO.
**             iType  : (OPTIONAL. DEFAULT=BLANK). 
**                      BLANK = XL DEFAULT SAVE TYPE
**                          1 = XLS DOC - OLD SCHOOL! PRE OFFICE 2007?
**                         44 = HTML - PRETTY COOL! CHECK IT OUT... 
**                         51 = XLSX DOC - OFFICE 2007 ONWARDS COMPATIBLE?
**                         57 = PDF
** 
** NOTES:  IF YOU ARE GETTING A DDE ERROR WHEN RUNNING THIS MACRO THEN DOUBLE
**         CHECK YOU HAVE PERMISSIONS TO SAVE WHERE YOU ARE TRYING TO SAVE THE
**         FILE.
** 
*******************************************************************************
** VERSION:
** 1.0 ON: 01APR10 BY: RP
**     CREATED.  
******************************************************************************/

%macro dde_save_as(iSaveAs=,iType=);
  %local iDocTypeClause;

  %let iDocTypeClause=;
  %if "&iType" ne "" %then %do;
    %let iDocTypeClause=,&iType;
  %end;

  filename cmdexcel dde 'excel|system';
  data _null_;
    file cmdexcel;
    put '[error(false)]';
    put "%str([save.as(%"&iSaveAs%"&iDocTypeClause)])";
    put '[error(true)]';
  run;
  filename cmdexcel clear;

%mend;
/*%dde_save_as(iSaveAs=d:\rrobxltest, iType=44);*/
1 голос
/ 09 февраля 2012

Я раньше использовал следующее:

put '[save.as("' "&savepath\&savename..&save_ext" '",1,,false,,false)]';

Я не могу сказать, чего достигают параметры "1" и "ложь", так как у меня нет документации DDE и я не могу найти ее в Интернете (она называется macrofun.hlp, и вы найдете ссылки на это во многих бумагах SUGI, например http://www2.sas.com/proceedings/sugi26/p011-26.pdf)

В любом случае, возможно, стоит изучить альтернативы DDE, который довольно стар на данном этапе.

...