powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Несколько неординарных вопросов по Word...
3 сообщений из 3, страница 1 из 1
Несколько неординарных вопросов по Word...
    #34588066
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем!

Вобщем у меня возникла необходимость работы из-под фоксы с вордом в связи с чем возникли некотооые трудности, решение которых я до сих пор нигде не нашел, втч ни на фоксклубе, ни здесь.
I) Мне необходимо добавлять к существующему документу небольшой шаблон.
Делаю это так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
      m.loWord = CREATEOBJECT('WORD.APPLICATION')
      m.loDoc = m.loWord.Documents.Open(m.lcDestFile)
      * Добавляю  2  параграфа (типа  2  ентера)
      m.loWord.ActiveDocument.Paragraphs.Add
      m.loWord.ActiveDocument.Paragraphs.Add
      m.loWord.ActiveDocument.Paragraphs.Last.Range.Select
      * добавляю нужный шаблон
      m.loWord.Selection.InsertFile(m.lcTempFile)
- проблема1: поскольку я добавляю 2 параграфа/ентера, то и на весь вставляемый после шаблон распространяются параметры шрифта и форматирования основного документа. Как это преодолеть? Мне нужно чтоб шаблон добавлялся в таком виде и с таким форматированием с каким он был создан.
- проблема2: я добавляю шаблон с некими полями и запрещаю редактировать все остальное кроме полей (m.loWord.ActiveDocument.Protect(2)). Но поскольку и основной документ создавался из шаблона то и в нем есть поля - а их-то уже нельзя редактировать - как это реализовать? Нужно что-то вроде конвертирования документа с полями в документ без оных, а тогда уже к нему добавлять шаблон с полями - но как?
- проблема3: вытекает из проблемы2 - я запрещаю редактирование документа кроме полей, но в таком случае поля почему-то не заполняются. Причем если защиту не включать то заполняются, а как только включаю - никаких сообщений нет, процедура программного заполнения проходит нормально, но все поля незаполненные...

II) Задача: запускаем ворд из-под фоксы с неким шаблоном. Даем юзеру редактировать содержимое полей.
II.1) Хотелось бы чтобы вернуться в фокс было невозможно пока не закроешь ворд с редактируемым документом. В связи с чем возникают такие вопросы:
1) Как запретить пользователю сохранять/создавать/добавлять/открывать файл(ы)? К примеру я нашел как запретить все основное меню, но это не совсем то, т.к. все еще можно нажать CTRL-S, CRTL-N, CRTL-O и вообще многое из меню нужно юзеру... Фактически же нужно запретить только меню Файл - но как? В принципе можно дать возможность сохраняться, но в заранее заданный файл и только. Тоже неизвестно как и все равно нужно запретить создание нового документа, SaveAs.
2) Теперь далее - юзер заполнил документ и закрывает ворд. Как при закрытии в таком случае вытряхнуть из ворда его документ? Как вообще словить этот момент чтоб сохранить данные?

II.2) Если не получается так, то я вижу следующий вариант - фоксой запускаю ворд и месиджбоксом жду когда юзер закончит. Тогда програмно забираю документ и закрываю ворд. Вопросы такие:
1) Как еще можно забрать документ кроме программного сохранения во временный файл, к примеру если я сохраняю документы не отдельными файлами, а в мемо-поле базы путем filetostr()? Может как-то через клипбоард, но с сохранением всех приколов - форматирование, шрифты, картинки и тп? Просто я читал что у офиса какой-то свой особенный тип буфера обмена... Опять же таким образом исключается лишнее сохранение в файл.
А может возможно узнать в какой временный файл сохраняется текущий документ, программно спровоцировать автосейв и забрать из него?
2) Остается в силе п II.1.1
3) Как не дать пользователю закрыть ворд как приложение при вызове ворда из-под фоксы?
4) Как расчехлиться что юзер, такая редиска, взял да и закрыл ворд сам если невозможно 3)? Нашел только вот такое решение (на фоксклубе):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
      m.llWordIsAlive = .T.
      TRY
	    m.loWord.visible = .t.
      CATCH
        m.llWordIsAlive = .F.
        *RETURN .F.
      ENDTRY

Спасибо!
VFP9.0, Office XP
...
Рейтинг: 0 / 0
Несколько неординарных вопросов по Word...
    #34588226
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На счет форматирования:
Открой руками исходный документ, запусти макрорекордер, сделай руками как надо, и посмотри что в макросе получилось, а потом этот макрос на фоксе перепиши.

По второму пункту, если я правильно понял что пользователь должен работать не более чем с одним документом, попробуй так:
создай глобальную переменную (лучше класс-обертку а в него все логику) для открытия документов, а дальше проверяй везде где обрашение к документам идет:
открыт документ - нельзя второй открывать
закрыл пользователь руками (по алгоритму из фоксклуба) - сохрани в базу что после закрытия осталось.

Или можешь через OLE свой документ прямо на форме открыть, в Solution посмотри, там пример есть. Тут как раз Word без меню "файл" получается. И сохранить этот OLE-объект в базу можно без промежуточных файлов.
...
Рейтинг: 0 / 0
Несколько неординарных вопросов по Word...
    #34590383
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На счет записи макросов - я знаю об этом способе, но прикол в том что я руками этого сделать не могу... соответственно нечего в макрос писать... получается вопрос уже вроде как по ворду и мне на соотв. форум - там уже тоже спросил, но пока что ответа нет...

по проблеме I.3 я уже одуплился - оказывается все поля что заполнены до выполнения команды защиты документа (m.loWord.ActiveDocument.Protect(2)) очищаются, а если после заполнить - то все ок.
по проблеме II.1.1. кое-что еще можно сделать - найти отдельные эелементы меню Файл. Но вот как запретить горячие клавиши - непонятно... опять же еси на панели будут кустомные значки сейва - я ж их не смогу убрать...

оле мне не понравилось.

короче решений пока что нет.

нарыл тут тему про автомакросы. там как раз можно в момент закрытия ворда или его документа подмутить че хошь. к примеру сохранение куда-нить.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Несколько неординарных вопросов по Word...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]