SAS EG - VB не работает без сообщения об ошибке - PullRequest
0 голосов
/ 06 августа 2020

У меня проблема с преобразованием rtf в pdf в SAS EG с помощью скрипта VB. Раньше он работал на сервере Base SAS.

Я использовал параметры pro c, чтобы узнать, открыт ли nocmd по умолчанию, однако, похоже, команда X включена.

proc options option=noxcmd define value;
run;

Option Definition Information for SAS Option XCMD
Group= ENVDISPLAY
Group Description: Windows and data display information
Description: Enables the X command in SAS.
Type: The option value is of type BOOLEAN
When Can Set: Session startup (command line or config) only
Restricted: Your Site Administrator can restrict modification of this option
Optsave: PROC Optsave or command Dmoptsave will not save this option NOTE: PROCEDURE OPTIONS used (Total process time):
  real time           0.00 seconds
  cpu time            0.00 seconds

%macro vbs_pdf(rtfname=,pdfname=);
        data _null_;
             length vbscmd $ 400;
             file "temp.vbs";
             put 'Dim ObjWord';
             put 'set objWord = CreateObject("Word.Application")';
             put 'objWord.Visible = True';
             vbscmd='objWord.Documents.Open("'|| "&rtfname" ||'")';
             put vbscmd;
             vbscmd='objWord.ActiveDocument.SaveAs "'||"&pdfname"||'", 17';
             put vbscmd;
             put 'objWord.ActiveDocument.Close(False)';
             put 'objWord.Application.Quit(False)';
        run;options noxwait;
        data _null_;
             command="START /WAIT CScript temp.vbs //NoLogo";
             call system(command);
             command2="DEL temp.vbs ";
             call system(command2);
        run;
    %mend;

    options noxwait;

    %vbs_pdf(rtfname=\\cifs\...\sample1.rtf,
             pdfname=\\cifs\...\sample1.pdf);

Ниже представлена ​​система, которую я использовал.

%put &=sysscp &=syshostname &=syshostinfolong ;
SYMBOLGEN:  Macro variable SYSHOSTINFOLONG resolves to X64_SRV16 WIN 10.0.14393  Server

Я не видел, чтобы в SAS EG выполнялась какая-либо команда X. Кто-нибудь знает, как заставить это работать?

1 Ответ

0 голосов
/ 06 августа 2020

Не уверен, поможет ли это, но мне нравится использовать механизм PIPE, чтобы программа SAS могла захватывать любые сообщения операционной системы.

data _null_;
  length command $200;
  do command="START /WAIT CScript temp.vbs //NoLogo","DEL temp.vbs";
    put command=;
    infile cmd pipe filevar=command end=eof;
    do while (not eof);
      input;
      put _infile_;
    end;
  end;
run;

Также убедитесь, что текущий рабочий каталог - это место, где вы может записать файл temp.vbs. В противном случае используйте полное имя для файла, чтобы его можно было создать в месте, где у вас есть доступ для записи.

Не уверены, почему вы используете здесь START? Почему бы просто не вызвать cscript напрямую? Также вы можете попробовать добавить перенаправление сообщений об ошибках в стандартный вывод в конец команд.

data _null_;
  length command $200;
  do command="cScript temp.vbs 2>&1","DEL temp.vbs 2>&1";
    put command=;
    infile cmd pipe filevar=command end=eof;
    do while (not eof);
      input;
      put _infile_;
    end;
  end;
run;
...