Скопируйте и вставьте таблицу из одного документа Word в другой SAS DDE - PullRequest
0 голосов
/ 02 января 2019

Я использую SAS v9.4, выполняю подключение через DDE к Word 2010.

Я хотел бы скопировать и вставить всю таблицу из одного документа Word в другой.Таблица помечена закладкой "IDX", и я могу выбрать таблицу, используя следующий код:

options noxsync noxwait xmin;
filename sas2word dde 'winword|system';
data _null_;
  file sas2word;
  put '[EditGoTo.Destination = "IDX"]';
  put '[TableSelectTable]';
run;

Я пробовал put '[ctrl+c]';, put '[copy]';, put '[TableCopy]';, put '[SelectionCopy]';, но ничего не кажетсяработать, и код вылетает.Кто-нибудь знает синтаксис, чтобы скопировать всю таблицу, а затем вставить ее в другой документ?

1 Ответ

0 голосов
/ 05 января 2019

Вот пример кода SAS 9.4M4, в котором используется экспериментальное назначение ODS WORD для создания двух документов Word и копирования таблицы из одного в другой. YMMV, и у вас, вероятно, есть дополнительная работа по таким вопросам, как обтекание таблицы и привязка.

filename one "c:\temp\one.docx";
filename two "c:\temp\two.docx";

ods _all_ close;

title; footnote;

options nocenter nonumber nodate;

ods word file=one;
  proc print data=sashelp.class (obs=5);
  proc print data=sashelp.cars (obs=5);
  proc print data=sashelp.demographics (obs=5);
  proc print data=sashelp.class (obs=5);
  run;
ods word close;

ods word file=two;
  proc print data=sashelp.cars (obs=10);
  run;
ods word close;

* start WORD;
options noxsync noxwait xmin;
%sysexec start "Yada yada yada" winword;
%let rc = %sysfunc(sleep(5,1));
%put NOTE: &=rc;

* define channel for sending commands;
filename word_cmd dde 'winword|system';

* put will send the commands to WORD;
data _null_;
  file word_cmd;
  cmd = cats ( "[FileOpen.Name=", quote(trim(pathname("One"))), "]");
  put cmd;

  put '[EditBookmark name:="IDX3", goto:=1]';
  put '[NextObject]';
  put '[GoToNextSection]';
  put '[TableSelectTable]';
  put '[EditCopy]';

  cmd = cats ( "[FileOpen.Name=", quote(trim(pathname("Two"))), "]");
  put cmd;
  put '[Selection.Goto(wdGotoLine, wdGotoLast)]';
  put '[EditPaste]';
run;

Команда Word ListCommands создаст документ, содержащий таблицу всех команд Word и сопоставлений активных клавиш.

data _null_;
  file word_cmd;
  put '[ListCommands]';
run;

Список продолжается в Word 2016 для 10 страниц. Команды Word также можно вызывать из соединений dde. К сожалению, ListCommands перечисляет описательное имя команды, а не команду, которая фактически требуется dde, и фактически не перечисляет все команды. Сайт WordMVP (https://wordmvp.com) собрал список - "Команды Word для Windows"

Word имеет встроенную команду ListCommands, которая создает таблицу всех команд Word с их текущими назначениями клавиш и меню. Тем не менее, он не перечисляет команды, используя их фактические имена; он также не содержит описания того, что на самом деле делают команды.
...
WordCmndsPDF.zip содержит список всех допустимых команд Word (Word 97 и выше) с использованием их правильных английских имен

Другой справочник по командам Word можно найти по адресу "Эквиваленты Visual Basic для команд WordBasic" , 6/13 / 2014.

Поисковый документ SAS для «WORD DDE» также предоставит дополнительные материалы.

...