Страница 7 из 8
Как закрыть WORD после передачи в него данных?
Добавлено: 01 Апрель 2022, 20:46
mpn2
gromov писал(а): 01 Апрель 2022, 20:16
Ворд закрыт, а OLE не убит.
Вы меня не слышите! Когда Ворд закрыли, проблем нет.
Ворд ЗАБЫЛИ закрыть и файл создают второй раз. Ворд открывается второй раз, а файл с тем же именем. Файл с тем же именем весит открытый в первом ворде. Надо в этом случае прервать Клашку.
Как закрыть WORD после передачи в него данных?
Добавлено: 02 Апрель 2022, 0:23
gromov
А вы читаете, что вам пишут или как ? Открывайте файл с УНИКАЛЬНЫМ ИМЕНЕМ.
Как закрыть WORD после передачи в него данных?
Добавлено: 02 Апрель 2022, 10:36
mpn2
gromov писал(а): 02 Апрель 2022, 0:23
А вы читаете, что вам пишут или как ? Открывайте файл с УНИКАЛЬНЫМ ИМЕНЕМ.
Да вы правы, что можно поменять имя, но как его менять? На любом открытии давать новое имя или давать новое имя когда "файл уже занят другим Вордом". Я думаю что второй вариант более правильный.
И вот вопрос: А как узнать что "файл уже занят другим Вордом".
У меня в Ворде формируется ответ на письмо, например входящее письмо имеет номер: 2545 и мне бы хотелось иметь выходной файл 2545.doc
Я не имею ничего против 2545_1.doc или 2545_2.doc....., но довесок к имени когда делать?
Я вам еще раз говорю: сама Клашка знает, что "файл уже занят другим Вордом", потому как она дает сообщение:
Сообщение: "Данная команда недоступна". По какому критерию она это сообщение сделала???? Вот и весь вопрос... только нужен ответ.
Как закрыть WORD после передачи в него данных?
Добавлено: 02 Апрель 2022, 10:49
finsoftrz
Можно проверить наличие файла и попробовать его удалить. Не удалился, значит открыт в другой программе (ворде).
Я для экселя (для ворда аналогично можно) использую временные файлы в каталоге пользователя - 1.xls, 2.xls и т.п. Перед экспортом специальная функция возвращает очередное свободное имя. Удаление временных файлов происходит автоматически при запуске программы пользователем. Стратегии тут могут быть разные.
Как закрыть WORD после передачи в него данных?
Добавлено: 02 Апрель 2022, 11:04
mpn2
finsoftrz писал(а): 02 Апрель 2022, 10:49
Можно проверить наличие файла и попробовать его удалить.
mpn2 писал(а): 02 Апрель 2022, 10:36
Я вам еще раз говорю: сама Клашка знает, что "файл уже занят другим Вордом", потому как она дает сообщение:
Сообщение: "Данная команда недоступна".
По какому критерию она это сообщение сделала ????
Данное сообщение формируется при попытке выполнения вот этой команды
и только тогда когда файл уже занят другим Вордом:
Код: Выделить всё
MSWord1.Control{'Application.Selection.Find.Execute("'&clip(Loc:F_Str)&'", , , , , , 1, 1, , "'&clip(Loc:R_Str)&'", 2)'}
Как закрыть WORD после передачи в него данных?
Добавлено: 02 Апрель 2022, 11:28
Дед Пахом
mpn2 писал(а): 02 Апрель 2022, 10:36
Я вам еще раз говорю: сама Клашка знает, что "файл уже занят другим Вордом", потому как она дает сообщение: Сообщение: "Данная команда недоступна". По какому критерию она это сообщение сделала???? Вот и весь вопрос... только нужен ответ.
"Клашка" ничего не знает ни о Ворде, ни о файлах в нём открытых, и сообщение это посылает не она.
Как закрыть WORD после передачи в него данных?
Добавлено: 02 Апрель 2022, 11:50
Игорь Столяров
mpn2 писал(а): 02 Апрель 2022, 11:04
только тогда когда файл уже занят другим Вордом
Мы не знаем, что у Вас используется в качестве шаблона ...
Посмотрите пожалуйста вот здесь:
https://forum.infostart.ru/forum9/topic164098/
https://forum.mista.ru/topic.php?id=825419&
Может быть это Ваш случай ?
Как закрыть WORD после передачи в него данных?
Добавлено: 02 Апрель 2022, 12:04
mpn2
Дед Пахом писал(а): 02 Апрель 2022, 11:28
"Клашка" ничего не знает ни о Ворде, ни о файлах в нём открытых, и сообщение это посылает не она.
Да вы правы.... это не Клашка. Я поискал данное сообщение во всех *.clw и во всех *.tpw *.tpl - такого текста нет.
Как закрыть WORD после передачи в него данных?
Добавлено: 02 Апрель 2022, 18:49
kreator
Раз такая беда, mpn2, качайте пример -
viewtopic.php?p=28210#p28210. Там экспорт в Еxcel. Не обращайте внимания на это. В рутине (в конце) посмотрите как надо работать с OLE. Повторю. Создаём OLE-контрол. Открываем файл. Что-то делаем с ним. Пересохраняем. Закрываем Excel. Удаляем OLE-контрол. Открываем файл ShellExecute'ом. Вы можете хоть раз десять нажать на кнопку "Экспорт". Всё работает как надо. И ещё повторю. Принципиальной разницы между Excel и Word нет.
Как закрыть WORD после передачи в него данных?
Добавлено: 03 Апрель 2022, 17:45
mpn2
kreator писал(а): 02 Апрель 2022, 18:49
Раз такая беда, mpn2, качайте пример - viewtopic.php?p=28210#p28210.
Спасибо! как нибудь обязательно ваш пример посмотрю, а пока у меня *.app без *.dct не открывается.
Я вышел из ситуации пока вот так: Я запросил у Клашки код ошибки после отработки команды Find.Execute:
Код: Выделить всё
MSWord1.Control{'Application.Selection.Find.Execute("'&clip(Loc:F_Str)&'", , , , , , 1, 1, , "'&clip(Loc:R_Str)&'", 2)'}
Message(ErrorCode())
В результате клашка дала код: 1011 - при первом открытии Ворда
и клашка дала код: 5 - при повторном открытии Ворда с тем же файлом.
И я написал вот так:
Код: Выделить всё
Replac_String ROUTINE
MSWord1.Control{'Selection.Find.ClearFormatting'}
MSWord1.Control{'Selection.Find.Replacement.ClearFormatting'}
MSWord1.Control{'Application.Selection.Find.Execute("'&clip(Loc:F_Str)&'", , , , , , 1, 1, , "'&clip(Loc:R_Str)&'", 2)'}
if ErrorCode() = 5 then ! Если файл уже открыт
Message('Данный файл уже открыт! Процедура будет прервана!!!') ! Ругаемся
Destroy(MSWord1.Control) ! Уничтожили OLE-контрол
do ProcedureReturn ! Прерываем процедуру
.
Exit
Может с точки зрения профессионального программирования это смешно и через жопу, но меня это вполне устраивает. И заказчик доволен... у него теперь ничего не виснет (если он с дуру попытается открыть файл в Ворде, который уже открыт).
Как закрыть WORD после передачи в него данных?
Добавлено: 03 Апрель 2022, 19:24
Игорь Столяров
mpn2 писал(а): 03 Апрель 2022, 17:45
пока у меня *.app без *.dct не открывается
Требование словаря в проекте можно отключить в настройке (см. рисунок).
А в остальном - я с Вами полностью согласен ...
Как закрыть WORD после передачи в него данных?
Добавлено: 04 Апрель 2022, 13:45
mpn2
Игорь Столяров писал(а): 03 Апрель 2022, 19:24
Требование словаря в проекте можно отключить в настройке (см. рисунок).
А в остальном - я с Вами полностью согласен ...
Ага, спасибо!
Да, и если не трудно подскажите не по теме:
Я тут с перепугу написал темплатку копирования записи (месяца 2 назад).... и все работало, а потом решил почистить копм и почистил так, что тепллатку эту стер.
Стал писать заново ... и не могу получить префикс файла.... заклинило меня так, что ума не приложу (что надо зафиксировать? и как у меня это получилось в первый раз)?
Код: Выделить всё
#!Создаем контрольные поля на кнопке -----------------------------
#PROMPT('Имя файла:', FILE), %PosFile, REQ
#PROMPT('Ключ чтения записи', KEY), %PosKey, REQ
#PROMPT('Процедура Insert:', @s9), %INS, default('?Insert')
#!----------------------------------------------------------------
#!------------------- Фиксируем поля -----------------------------
#AT(%AfterFileDeclarations)
#FIX(%File, %Primary)
????????????????????????? Что еще надо зафиксировать?
#ENDAT
#!----------------------------------------------------------------
#!------ Точка вставки на созданной кнопке -----------------------
#AT(%ControlEventHandling,%ButonControl,'Accepted')
!Код процедуры: Копирование записи (Начало-F5) ==================
GET(%PosFile,%PosKey) !Зачитаем зпись
Copy%FilePrefix = %FilePrefix:Record !Запомним запись ?????????????????????
POST(EVENT:Accepted,%INS) !Вызываем процедуру -=Insert=-
!=====================================================================
#ENDAT
Не могу получить значение
%FilePrefix

Как закрыть WORD после передачи в него данных?
Добавлено: 04 Апрель 2022, 14:37
Игорь Столяров
mpn2 писал(а): 04 Апрель 2022, 13:45написал темплатку
Не ко мне. Игорь, темплатки клаши для веников не обучен делать. Совсем.

Лучше отдельную тему заведите в специальном разделе. Это бесплатно.

Как закрыть WORD после передачи в него данных?
Добавлено: 04 Апрель 2022, 15:12
Admin
mpn2 писал(а): 04 Апрель 2022, 13:45
не могу получить префикс файла
Помнится мне что достаточно:
Только шаблон должен быть привязан к бровзу через
,REQ(BrowseBox(ABC))
mpn2 писал(а): 04 Апрель 2022, 13:45
а потом решил почистить копм
Стоит начать пользоваться бекапами а лучше github
Как закрыть WORD после передачи в него данных?
Добавлено: 05 Апрель 2022, 9:45
mpn2
Admin писал(а): 04 Апрель 2022, 15:12
#FIX(%File, %Primary)
! use %FilePrefix
Не понимаю я вашу подсказку
Я в темплатке пишу вот так:
Код: Выделить всё
Copy%FilePrefix = %FilePrefix:Record !Запомним запись
а получается вот так:
У меня к примеру есть файл Street с префиксом
STR и я хочу чтобы получилось вот так: