Переход с DDE на экспорт proc, поскольку Office 2016 его не поддерживает

office excel 2016 по какой-то причине не поддерживает команду DDE и поэтому происходит сбой следующих программ. Вы знаете, как я могу заставить его работать? Я пробовал с экспортом proc, я добавлю код, который пробовал, в качестве комментария. Или, если у вас есть другая идея, как это может работать, пожалуйста, поделитесь. Заранее спасибо!

ods listing close;
ODS HTML path="path' 
(TITLE="CD");
title;footnote;
%macro prnt;
%if &nobs ne 0 %then %do;
title1 "CDTC";
footnote "PROGRAM: (, UPDATED: &tist";
proc print data = dag.dc label noobs; run;
%end;
ods HTML close;
ods listing;
%mend;
%prnt;
/*
proc export data = inter
        outfile = 
"\\sraw.xlsx"
        dbms = xlsx
        replace;
run;
*/
options noxwait noxsync;
%SYSEXEC "C:\Program Files (x86)\Microsoft Office\Office14\excel.exe";
%sysexec "C:\Program Files (x86)\Microsoft Office\root\Office16\excel.exe";
data _null_;
x=sleep(10);
run;
filename Commands dde 'excel|system';
/*Open file and unprotect*/
DATA _null_;
FILE commands;
PUT '[ERROR(FALSE)]';
*Put '[open("\\PATH.xlsx")]';
put '[open("PATH")]';
/*put '[workbook.activate("sheet1")]';*/
Put '[PROTECT.DOCUMENT(FALSE, FALSE, , FALSE, FALSE)]';
RUN;
%LET ARK=sheet1;
%LET RU=4;
filename C1 dde "EXCEL|&ARK!R&RU.C1:R1000C1" NOTAB;
filename C2 dde "EXCEL|&ARK!R&RU.C2:R1000C2" NOTAB;
filename C3 dde "EXCEL|&ARK!R&RU.C3:R1000C3" NOTAB;
filename C4 dde "EXCEL|&ARK!R&RU.C4:R1000C4" NOTAB;
filename C5 dde "EXCEL|&ARK!R&RU.C5:R1000C5" NOTAB;
filename C6 dde "EXCEL|&ARK!R&RU.C6:R1000C6" NOTAB;
filename C7 dde "EXCEL|&ARK!R&RU.C7:R1000C7" NOTAB;
filename C8 dde "EXCEL|&ARK!R&RU.C8:R1000C8" NOTAB;
filename C9 dde "EXCEL|&ARK!R&RU.C9:R1000C9" NOTAB;
filename C10 dde "EXCEL|&ARK!R&RU.C10:R1000C10" NOTAB;
filename C11 dde "EXCEL|&ARK!R&RU.C11:R1000C11" NOTAB;
filename C12 dde "EXCEL|&ARK!R&RU.C12:R1000C12" NOTAB;
filename C13 dde "EXCEL|&ARK!R&RU.C13:R1000C13" NOTAB;
filename C14 dde "EXCEL|&ARK!R&RU.C14:R1000C14" NOTAB;
filename C15 dde "EXCEL|&ARK!R&RU.C15:R1000C15" NOTAB;
filename C16 dde "EXCEL|&ARK!R&RU.C16:R1000C16" NOTAB;
filename C17 dde "EXCEL|&ARK!R&RU.C17:R1000C17" NOTAB;
filename C18 dde "EXCEL|&ARK!R&RU.C18:R1000C18" NOTAB;
filename C19 dde "EXCEL|&ARK!R&RU.C19:R1000C19" NOTAB;
DATA _NULL_;
SET INTER;
FILE C1;
PUT COLLATAGREEMENTID;
FILE C2;
PUT CCYID;
FILE C3;
PUT TYPE;
FILE C4;
PUT AGREEMENTNO;
FILE C5;
PUT WSSCUSTID;
FILE C6;
put receffective $12.;
*PUT RECEFFECTIVE commax32.2;
FILE C7;
PUT RECINDEX;
FILE C8;
PUT RECEFFRATE;
*PUT RECEFFRATE commax32.5;
FILE C9;
PUT RECACCRUAL;
*PUT RECACCRUAL commax32.2;
FILE C10;
PUT DELIVEFFECTIVE;
*PUT DELIVEFFECTIVE commax32.2;
FILE C11;
PUT DELIVINDEX;
FILE C12;
PUT DELIVEFFRATE;
*PUT DELIVEFFRATE commax32.5;
FILE C13;
PUT DELIVACCRUAL;
*PUT DELIVACCRUAL commax32.2;
FILE C14;
PUT TOTEFFECTIVE;
*PUT TOTEFFECTIVE commax32.2;
FILE C15;
PUT TOTACCRUAL;
*PUT TOTACCRUAL commax32.2;
FILE C16;
PUT PRODDATE;
FILE C17;
PUT ENDDATE ;
FILE C18;
PUT FIXED_BAL_EUR;
*PUT FIXED_BAL_EUR commax32.2;
FILE C19;
PUT ON_BAL_EUR;
*PUT ON_BAL_EUR commax32.2;
RUN;
/*TVI 23-09-2016 
data _null_;
a='[SAVE.AS('||'"'||'\\PATH';
s="&sta2";
b='.xlsX'||'"'||')]';
c=a||s||b;
call symput('b',"'"||c||"'");
run;
*/
data _null_;
a='[SAVE.AS('||'"'||"PATH";
s="&sta2";
b='.xlsX'||'"'||')]';
c=a||s||b;
call symput('b',"'"||c||"'");
run;
%put &b;
%let savefile= &b;
dATA _NULL_;
FILE COMMANDS lrecl=1024;
PUT '[ERROR(FALSE)]';
PUT &SAVEFILE;
run;
/*lukker excel ned igen*/
DATA _NULL_;
FILE COMMANDS;
PUT '[QUIT()]';
RUN;
QUIT;

person Tazz    schedule 15.02.2018    source источник
comment
данные а; а = 1; выход; бежать; proc export data=a outfile=\\path\DR_TEMPLATE_NY.xlsx dbms=xlsx; БЕЖАТЬ;   -  person Tazz    schedule 15.02.2018
comment
Вы экспортируете данные в существующую книгу Excel?   -  person Richard    schedule 15.02.2018
comment
Привет, Ричард, да, я экспортирую данные в существующий шаблон и формат Excel.   -  person Tazz    schedule 15.02.2018
comment
Вы должны включить DDE в Office 2016, чтобы он мог работать. Это в настройках офиса. Но он был официально отключен для WORD, но опять же, при желании это можно переопределить. Похоже, что недавно (за последние три месяца) было выпущено какое-то вредоносное ПО, которое использовало DDE, поэтому MSFT решили отключить его в обновлении.   -  person Reeza    schedule 15.02.2018
comment
Я согласен с Reeza, но мне просто нужно заменить DDE на случай, если он будет удален навсегда.   -  person Tazz    schedule 16.02.2018


Ответы (2)


У меня была ТОЧНО такая же проблема. Проблема в настройках реестра для excel 2016 DDE.

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Excel\Options]
"DontUpdateLinks"=dword:00000000
"DDEAllowed"=dword:00000000
"DDECleaned"=dword:00000000

сохраните это в файле .reg и объедините с реестром, закройте и перезапустите excel

person Peter Cibulskis    schedule 18.07.2018

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

Например, создайте многолистовую книгу, а затем замените один из листов.

Создайте шаблон (один раз) для демонстрационных целей;

filename TEMPLATE 'c:\temp\demo-template.xlsx' recfm=n;

data _null_;
  rc = FDELETE ('TEMPLATE');
run;    

proc export data=sashelp.class(obs=0) dbms=excel replace file=TEMPLATE;
  sheet = 'DATA_FOR_TEMPLATE';
run;
proc export data=sashelp.cars(obs=10) dbms=excel replace file=TEMPLATE;
  sheet = 'CARS_DATA';
run;

Теперь обновите один лист в шаблоне, предварительно скопировав его в свой файл save/as

filename REALIZE1 'c:\temp\demo-15feb2018.xlsx' recfm=n;

* copy template to desired 'save/as';

data _null_;
  rc = FCOPY ('TEMPLATE', 'REALIZE1');
run;

* replace all of a sheet;

proc export data=sashelp.class dbms=excel replace file=REALIZE1;
  sheet = 'DATA_FOR_TEMPLATE';
run;

filename TEMPLATE;
filename REALIZE;

В случае шаблона с защитой, которую необходимо отключать и включать, вы можете сделать это в сценарии powershell или excel vb.

person Richard    schedule 15.02.2018
comment
Спасибо, Ричард, я проверю и дам вам знать :) - person Tazz; 15.02.2018
comment
Привет, Ричард, я попробовал, но как мне сделать так, чтобы процесс экспорта просто вставлял все данные в новый лист Excel без существующего шаблона? - person Tazz; 16.02.2018
comment
имя файла ШАБЛОН 'path\Book1.xlsx' recfm=n; ДАННЫЕ data.data; ФОРМАТ CollatagreementID $100.; ФОРМАТ CCYID $50.; ФОРМАТ Доставки COMMA20.; ОСТАНОВКА; БЕЖАТЬ; PROC EXPORT DATA=data.data DBMS=XLSX REPLACE LABEL OUTFILE=path\Book1.xlsx; ЛИСТ=EFINTERESTS; БЕЖАТЬ; - person Tazz; 16.02.2018
comment
С помощью приведенного выше кода я попытался отформатировать его на листе Excel, но на самом деле он не работает, есть идеи, почему? - person Tazz; 16.02.2018
comment
Расскажите подробнее о том, что вы видите и чего хотите. Начните новый вопрос, так как тема отошла от DDE. - person Richard; 16.02.2018
comment
Точный язык нового листа (вещь внутри файла) по сравнению с новой книгой (файл). Означает ли внутри нового листа Excel без существующего шаблона новый файл. - person Richard; 16.02.2018