Как закрыть WORD после передачи в него данных?

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7323
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Как закрыть WORD после передачи в него данных?

Сообщение Игорь Столяров »

kreator писал(а): 01 Апрель 2022, 3:29 А что это? Спецсборка наших умельцев?
Нет. Каждая версия Microsoft Office имеет номер релиза и красивое маркетинговое название.
В данном случае речь идёт о Microsoft Office 2010. Достаточно редкий релиз ...

Интересно, в этом семействе есть т.н. Microsoft Office 2010 Starter - эксперимент Microsoft
c бесплатным офисным пакетом, котором показывается реклама. Там были ограничения по
операционной системе (Windows 7 / Vista) и отключена интеграция по ActiveX (если не ошибаюсь).

Считается, что провал именно этого проекта изменил планы Microsoft по выпуску бесплатной
операционной системы с показом рекламы, которую мы теперь знаем как Windows 10 ... :)
За теми кто отстал - не возвращаться. (С) Кодекс
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Как закрыть WORD после передачи в него данных?

Сообщение kreator »

Понятно. Да, многие разработчики так делают (Corel, Adobe вроде тоже). Но обычно этот внутренний номер никто не знает и особо он не нужен.
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7323
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Как закрыть WORD после передачи в него данных?

Сообщение Игорь Столяров »

kreator писал(а): 01 Апрель 2022, 12:03 Но обычно этот внутренний номер никто не знает и особо он не нужен
Не соглашусь ... если использовать современные возможности, то нужно контролировать номер версии пакета.

Код: Выделить всё

     If Int(DeFormat(WordControl{'Application.Version'})) < 14  ! Microsoft Office 2007 и младше     
     else   ! Microsoft Office 2010 и старше
     end
За теми кто отстал - не возвращаться. (С) Кодекс
mpn2
Бывалый
Сообщения: 62
Зарегистрирован: 24 Февраль 2015, 17:15

Как закрыть WORD после передачи в него данных?

Сообщение mpn2 »

Игорь Столяров писал(а): 01 Апрель 2022, 12:13 Не соглашусь ... если использовать современные возможности, то нужно контролировать номер версии пакета.
Не знаю на сколько я вам надоел, но вот вам продолжение истории, можно смеяться!
Итак: вы мне посоветовали заменить

Код: Выделить всё

feqOLE{'Application.ActiveDocument.SaveAs2("'& Clip(Left(Loc:SaveFileName)) &'")'}
на

Код: Выделить всё

   Copy(Loc:WordFileName,Loc:SaveFileName)       
и я наивно обрадовался, и радостный ходил 1 день, т.к. все как бы заработало, но.....
но потом я перенес программу на другую машину:
- на моей Windows7 и Word14
- на другой Windows7 и Word16 .... и началось все с самого начала .... при открытии WORDa повторно Клашка напрочь "Виснет".
Сообщение: "Данная команда недоступна"
"Методом научного тыка" стал искать где? Убился, замучила она меня так, что уже хотел все бросить эту идею (с передачей данных в WORD) похерить полностью, но Бог есть!
Оказалось, что не может отработать вот эта команда:

Код: Выделить всё

   feqOLE{'Application.Selection.Find.Execute("'&clip(Loc:F_Str)&'", , , , , , 1, 1, , "'&clip(Loc:R_Str)&'", 2)'}
   ! ищем и меняем,(цифра "2" в конце - искать и менять по всему документу)
Это именно эта скотинка при открытом файле в WORDE и при попытке его отредактировать повторно, дает вот это сообщение:
"Данная команда недоступна"
Как бы все ничего... сообщение всего одно и легко закрывается.... но..... но это происходит только тогда если мы ВТОРОЙ открытый WORD не закрываем, а вот если мы его закрываем, то тут начинается самое интересное!!!! :idied:

При закрытии WORDa открывается окно "GetIn Failed"
6 раз с сообщением "Selection"
и 3 раза с сообщением "Application" ...... итого 9 окон! А так как я меняю 25 записей (полей) то открывается 25*9= 225 окон с сообщением об ошибке. ...... и это только если я WORD повторно открыл/закрыл 1 раз. ..... а если не один?
И самое смешное, что оказывается, что ничего не виснет, все работает, просто окон дохрена и их невозможно закрыть мышкой и создается иллюзия что все зависло, а на самом деле все снимается CTR+F4 в течении 10 сек.
mpn2
Бывалый
Сообщения: 62
Зарегистрирован: 24 Февраль 2015, 17:15

Как закрыть WORD после передачи в него данных?

Сообщение mpn2 »

Я так понимаю, что после первого выполнения:

Код: Выделить всё

feqOLE{'Application.Selection.Find.Execute("'&clip(Loc:F_Str)&'", , , , , , 1, 1, , "'&clip(Loc:R_Str)&'", 2)'}
надо отловить сообщение о том, что "файл WORDом уже открыт" и просто тупо прервать процедуру.
Последний раз редактировалось mpn2 01 Апрель 2022, 18:31, всего редактировалось 1 раз.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7323
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Как закрыть WORD после передачи в него данных?

Сообщение Игорь Столяров »

mpn2 писал(а): 01 Апрель 2022, 18:18 Оказалось, что не может отработать вот эта команда
Мы используем такой же код как у Вас, он прекрасно работает для всех версий Microsoft Word ...

Код: Выделить всё

      Object{'Selection.Find.ClearFormatting'}             ! - очистили ранее указанные параметры поиска
      Object{'Selection.Find.Replacement.ClearFormatting'} ! - очистили ранее указанные параметры замены
      ! - ищем и меняем, по всему документу (цифра "2" в конце - искать и менять по всему документу)
      Object{'Application.Selection.Find.Execute("' & Clip(Field_) & '", , , , , , 1, 1, , "' & Clip(Value_) & '", 2)'}
Весёлую (наверно) историю про несколько копий Word не понимаю и уже читать не стал ...
За теми кто отстал - не возвращаться. (С) Кодекс
mpn2
Бывалый
Сообщения: 62
Зарегистрирован: 24 Февраль 2015, 17:15

Как закрыть WORD после передачи в него данных?

Сообщение mpn2 »

Игорь Столяров писал(а): 01 Апрель 2022, 18:29 Весёлую (наверно) историю про несколько копий Word не понимаю и уже читать не стал ...
Это потому как вы опытный пользователь ПК и вы закрываете не нужные вам программки во время работы...., а у 99,99% обычных смертных во время работы:
Word открыт 5 раз
Excel открыт 10 раз
АutoCad 3 раза ну и т.д. и т.п.
===============================
...... вы мне подскажите код ошибки и имя переменной что "файл уже открыт"? .... я на вас надеюсь!
gromov
Старожил
Сообщения: 263
Зарегистрирован: 11 Февраль 2009, 8:41
Откуда: г. Анапа
Поблагодарили: 3 раза

Как закрыть WORD после передачи в него данных?

Сообщение gromov »

Примерно понятно, где жопа спряталась. Вы делаете копию шаблона, открываете документ и делаете это несколько раз. В связи с этим вопрос: копии шаблона имеют одинаковое имя ? Если да, то тут собака и порылась. Чтобы этого не происходило нужно имя файла, в кот. копируется шаблон, сделать уникальным. Типа <имя шаблона> & <случайное число>.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7323
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Как закрыть WORD после передачи в него данных?

Сообщение Игорь Столяров »

mpn2 писал(а): 01 Апрель 2022, 18:42 Word открыт 5 раз
Excel открыт 10 раз
АutoCad 3 раза ну и т.д. и т.п.
Могу по доброму позавидовать Вашему благосостоянию.
Мой бы компьютер от такого сдох.
mpn2 писал(а): 01 Апрель 2022, 18:42 код ошибки и имя переменной что "файл уже открыт"
Насколько я понимаю - такого нет. Вы можете управлять открытием документа через
параметры метода Documents.Open(). Вот здесь описание на человеческом языке:
https://docs.microsoft.com/ru-ru/office ... ments.open

Я честно сказал, что не понимаю смысл того что Вы делаете и длинно рассказываете.
- Создал новый документ в Microsoft Word и открыл ещё два документа;
- Создал отчёт и выгрузил его в DOCX через Microsoft Word;
- Создал отчёт и выгрузил его в DOCX через Microsoft Word;
- Создал отчёт и выгрузил его в DOCX через Microsoft Word;
- В Диспетчере Задач - 6 копий Microsoft Word;
- Закрыл все документы;
- В Диспетчере Задач нет открытых копий Microsoft Word.
За теми кто отстал - не возвращаться. (С) Кодекс
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Как закрыть WORD после передачи в него данных?

Сообщение kreator »

У меня так. Шаблон только на чтение (чтобы чайник случайно не затёр). Открываем сразу шаблон, в нём что-то делаем. Сохраняем в другую папку уже как документ. Закрываем документ и убиваем OLE. Открываем документ ShellExecute'ом. И совершенно пофиг сколько Вордов открыто у пользователя. Закрывается только моя сессия. И не понимаю эти танцы с бубном.
We are hard at work… for you. :)
mpn2
Бывалый
Сообщения: 62
Зарегистрирован: 24 Февраль 2015, 17:15

Как закрыть WORD после передачи в него данных?

Сообщение mpn2 »

Игорь Столяров писал(а): 01 Апрель 2022, 20:00 Насколько я понимаю - такого нет.
Ну как нет? А как клашка ругается: "Данная команда недоступна". Что заставляет ее сделать такое сообщение?
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7323
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Как закрыть WORD после передачи в него данных?

Сообщение Игорь Столяров »

mpn2 писал(а): 01 Апрель 2022, 20:08 А как клашка ругается: "Данная команда недоступна"
Покажите пожалуйста снимок экрана с ошибкой.
Насколько я понимаю - это сообщение выдаётся Microsoft Word ...
За теми кто отстал - не возвращаться. (С) Кодекс
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Как закрыть WORD после передачи в него данных?

Сообщение kreator »

Наверно не Клашка, а Ворд через ОЛЕ ругается.
We are hard at work… for you. :)
gromov
Старожил
Сообщения: 263
Зарегистрирован: 11 Февраль 2009, 8:41
Откуда: г. Анапа
Поблагодарили: 3 раза

Как закрыть WORD после передачи в него данных?

Сообщение gromov »

Ворд закрыт, а OLE не убит.
mpn2
Бывалый
Сообщения: 62
Зарегистрирован: 24 Февраль 2015, 17:15

Как закрыть WORD после передачи в него данных?

Сообщение mpn2 »

kreator писал(а): 01 Апрель 2022, 20:13 Наверно не Клашка, а Ворд через ОЛЕ ругается.
Ворд ругается: "Файл уже открыт, могу открыть только для чтения"
А клашка ругается: "Данная команда недоступна". И ругается она при попытке отработки вот этой команды:

Код: Выделить всё

Object{'Application.Selection.Find.Execute("' & Clip(Field_) & '", , , , , , 1, 1, , "' & Clip(Value_) & '", 2)'}
Получается, что данная команда не может заменить "шило на мыло" у нее возникает ошибка и она говорит: "Данная команда недоступна".
Вот и надо поиметь например: ErrorCode() = 12 или 13 или что то типо этого и тогда можно будет сделать так:

Код: Выделить всё

Object{'Application.Selection.Find.Execute("' & Clip(Field_) & '", , , , , , 1, 1, , "' & Clip(Value_) & '", 2)'}
if  ErrorCode() = 12 then
Message('Данный файл уже открыт, процедура будет прервана!!!')
do ProcedureReturn
.
А если при выполнении данной команды данной ошибки нет, то все отрабатывает без проблем. А то что ошибка возникает - это 100% иначе чего она ругается "Данная команда недоступна" ???
Ответить