Страница 1 из 1
Проблема с Excel

Добавлено:
Вт дек 01, 2009 1:38 pm
Blaze
Требуется скопировать файл, открыть его и передать туда данные. Делаю вот что.
На кнопку записываю команду:
FileCopy( "c:\Книга1.xls", "c:\Книга2.xls", "DTag" );
Далее обрабатываю скрипт на изменение. Без этого нельзя, ибо копирование занимает некоторое время.
IF DTag == 1 THEN
IF InfoAppActive(InfoAppTitle("excel")) == 1 THEN
ActivateApp(InfoAppTitle("excel"));
ELSE
StartApp "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE c:\Книга2.xls";
ENDIF;
Mtag = "abs";
WWPoke("excel","[Книга2.xls]Лист1", "r1c1",Mtag);
DTag = 0;
ENDIF;
Проблема в том, что при открытии файла управление передается в excel и скрипт видимо прекращает работу. По крайней мере wwPoke не срабатывает. Поменять этот кусочек текста и вышестоящий тоже нельзя, ибо wwPoke работает лишь с открытым документом.
Как сделать так, чтобы файл открывался, но скрипт продолжал выполняться? Или чтобы можно было записывать данные в ячейки excel, не открывая файл?

Добавлено:
Чт дек 03, 2009 9:10 pm
Spaun
Может нужно сначала открыть DDE-канал между Excel и InTouch, а только потом посылать данные ?
зы: попробуйте сначала такую строчку:
WWPoke("c:\Книга2.xls","Лист1", "r1c1",Mtag);

Добавлено:
Пт дек 04, 2009 7:29 am
Blaze
wwPoke работает только когда приложение запущено. Заранее оно запущено быть не может, ибо документ еще надо создать. А при запуске приложения, оно активируется, т.е. управление передается ему.

Добавлено:
Пт дек 04, 2009 7:51 am
Klinkmann_Msk
To Blaze:
Можно попробовать интегрировать в окно InTouch-а ActiveX Microsoft IE и открывать xls-файл в нём. Тогда управление (по идее) должно остаться у InTouch и скрипт продолжит работу.

Добавлено:
Пт дек 04, 2009 9:25 am
Blaze
Не совсем понял, что это за компонент такой?

Добавлено:
Пт дек 04, 2009 2:39 pm
Klinkmann_Msk
To Blaze:
InTouch Maker, Configure-Wizard/ActiveX Installation, закладка ActiveX Control Installation. Найти и установить ActiveX Microsoft Web Browser. Пользоваться им через кнопку визардов (шутовской колпак).

Добавлено:
Пт дек 04, 2009 3:01 pm
Blaze
Может так получиться, что этот компонент отсутствует в списке установки?

Добавлено:
Вс дек 06, 2009 3:57 am
VoFFka
Можно сделать так
На кнопку посадить
IF InfoAppActive(InfoAppTitle("excel")) == 1 THEN
Mtag = "abs";
WWPoke("excel","[Книга2.xls]Лист1", "R1C1",Mtag);
DTag = 0;
ELSE
FileCopy( "c:\Книга1.xls", "c:\Книга2.xls", "DTag" );
ENDIF;
Далее в окне кнопки Widow Script выбрать "While showing" выставить время повтора 1000 кинуть это
IF DTag == 1 THEN
IF InfoAppActive(InfoAppTitle("excel")) == 1 THEN
ActivateApp(InfoAppTitle("excel"));
ELSE
StartApp "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE c:\Книга2.xls";
ENDIF;
ENDIF;
Потом создать Condition script на тэг Dtag настроить на выполнение While True время 5000 и записать это выражение
Mtag = "abs";
WWPoke("excel","[Книга2.xls]Лист1", "R1C1",Mtag);
DTag = 0;
и все должно работать....

Добавлено:
Пн дек 07, 2009 7:55 am
Blaze
Да так работает, спасибо.
Только возник вопрос. Если у меня в окошке на Widow Script для "While showing" выбрано 1 Msec, то можно ли дополнительно как-то поставить 1000? Или возможно только одно значение для одного окошка?

Добавлено:
Пн дек 07, 2009 8:02 am
Klinkmann_Msk
Blaze писал(а):Может так получиться, что этот компонент отсутствует в списке установки?
Ну это вряд ли

Разве что IE отсутствует в ОС.

Добавлено:
Вт дек 08, 2009 5:59 am
VoFFka
Поставить два значения "While Showing" нельзя.....а еще эксперементально установлено что значение меньше чем 100 Msec не выполняется...Можно установить 100.......

Добавлено:
Вт дек 08, 2009 7:38 am
Dimis
"Может нужно сначала открыть DDE-канал между Excel и InTouch, а только потом "
посылать данные ? "
По-моему , так и есть. До функции Poke вроде бы должна быть еще какая то функция иницилизирующая DDE-соединение.
В эксель не пробовал,но вот из имитатора (DDE - сервера ) в InTouch (DDE- клиент) до функции Poke точно была функция создающая соединение. Щас уже и не вспомню какая.
PS: cервер писался на Pytone. Надо глянуть как в Quick Script -е с этим обстоят дела.)