Текущее время: Ср, июл 30 2025, 03:18

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Проблема не могу удалить BOOKMARK через OLE.
СообщениеДобавлено: Чт, дек 17 2009, 16:35 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, дек 23 2005, 13:28
Сообщения: 113
Откуда: Южно-Сахалинск
GET PROPERTY OF WORD_OBJ 'Application' = APP_OBJ.
GET PROPERTY OF APP_OBJ 'Selection' = SEL_OBJ.
CALL METHOD OF SEL_OBJ 'GoTo' EXPORTING #1 = -1
* #2 = SPACE
* #3 = SPACE
#4 = 'ZAKL1'.


CALL METHOD OF SEL_OBJ 'Delete' EXPORTING #1 = 1
#2 = 1.
*->вот эта хрень не прокатила которая находится выше. но при это м субрц = 0


GET PROPERTY OF WORD_OBJ 'ActiveDocument' = ACT_OBJ .
GET PROPERTY OF ACT_OBJ 'Bookmarks' = BOOKMARKS_OBJ.
CALL METHOD OF BOOKMARKS_OBJ 'Item' = BOOKMARK_OBJ EXPORTING #1 = 'ZAKL1'.


CALL METHOD OF BOOKMARK_OBJ 'Select'.
Здесь СУБРС = 2


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема не могу удалить BOOKMARK через OLE.
СообщениеДобавлено: Чт, дек 17 2009, 17:16 
Специалист
Специалист

Зарегистрирован:
Ср, апр 29 2009, 07:08
Сообщения: 197
Откуда: AUS RUSSLAND
Пол: Мужской
Crasher написал(а):
Code:
GET PROPERTY OF WORD_OBJ 'Application' = APP_OBJ.
GET PROPERTY OF  APP_OBJ 'Selection' = SEL_OBJ.
CALL METHOD OF SEL_OBJ 'GoTo'  EXPORTING #1 = -1
*                                         #2 = SPACE
*                                         #3 = SPACE
                                         #4 = 'ZAKL1'.


Здесь у вас просто происходит навигация, т.е. курсор перемещается в позицию определенную, соотв-ю закладке, поэтому
Code:
CALL METHOD OF SEL_OBJ 'Delete' EXPORTING #1 = 1
#2 = 1.

нормально отрабатывает, так как выделение на данный момент всего лишь позиция. Закладку таким образом не удалишь


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема не могу удалить BOOKMARK через OLE.
СообщениеДобавлено: Чт, дек 17 2009, 17:52 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, дек 23 2005, 13:28
Сообщения: 113
Откуда: Южно-Сахалинск
в VBA это действие отрабатывало нормально и выглядит следующим образом:

Selection.GoTo What:=wdGoToBookmark, name:='ZAKL1'
With ActiveDocument.Bookmarks
.DefaultSorting = wdSortByName
.ShowHidden = False
End With
Selection.Delete Unit:=wdCharacter, Count:=1


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема не могу удалить BOOKMARK через OLE.
СообщениеДобавлено: Чт, дек 17 2009, 18:00 
Специалист
Специалист

Зарегистрирован:
Ср, апр 29 2009, 07:08
Сообщения: 197
Откуда: AUS RUSSLAND
Пол: Мужской
Crasher написал(а):
в VBA это действие отрабатывало нормально и выглядит следующим образом:

Selection.GoTo What:=wdGoToBookmark, name:='ZAKL1'
With ActiveDocument.Bookmarks
.DefaultSorting = wdSortByName
.ShowHidden = False
End With
Selection.Delete Unit:=wdCharacter, Count:=1

Видимо есть своя специфика, вот только что в Word записал макрос по переходу на закладку и затем ее удаление, ищите отличия:))
Code:
    Selection.GoTo What:=wdGoToBookmark, Name:="ZAKL1"
    With ActiveDocument.Bookmarks
        .DefaultSorting = wdSortByName
        .ShowHidden = False
    End With
    ActiveDocument.Bookmarks("ZAKL1").Delete
    With ActiveDocument.Bookmarks
        .DefaultSorting = wdSortByName
        .ShowHidden = False
    End With


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема не могу удалить BOOKMARK через OLE.
СообщениеДобавлено: Чт, дек 17 2009, 18:01 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, дек 23 2005, 13:28
Сообщения: 113
Откуда: Южно-Сахалинск
уточняю проблему. мне нужно удалить текст который выделяется букмарком(например убить какой либо пункт)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема не могу удалить BOOKMARK через OLE.
СообщениеДобавлено: Чт, дек 17 2009, 18:05 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, дек 23 2005, 13:28
Сообщения: 113
Откуда: Южно-Сахалинск
теперь метод Goto выдаёт sy-subrc = 2 :( что ж за напасть такая :mrgreen:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема не могу удалить BOOKMARK через OLE.
СообщениеДобавлено: Чт, дек 17 2009, 18:13 
Специалист
Специалист

Зарегистрирован:
Ср, апр 29 2009, 07:08
Сообщения: 197
Откуда: AUS RUSSLAND
Пол: Мужской
Crasher написал(а):
уточняю проблему. мне нужно удалить текст который выделяется букмарком(например убить какой либо пункт)

Ну тогда очевидно вместо:
Code:
Selection.Delete Unit:=wdCharacter, Count:=1

удаление одного символа, должно быть что-то другое - абзац,строка и соответствующие параметры для программы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема не могу удалить BOOKMARK через OLE.
СообщениеДобавлено: Пт, дек 18 2009, 09:41 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, дек 23 2005, 13:28
Сообщения: 113
Откуда: Южно-Сахалинск
Selection.Delete Unit:=wdCharacter, Count:=1 <-данная конструкция выполняет то что нужно если я юзаю document_proxy->execute_macro.

Тоесть приведённый выше код VBA отрабатывает корректно и удаляет весь текст букмарка.

Но по причине политики безопасности макросы заперещены к использованию в мс ворде у юзверов. поэтому нужно этот код транслировать через оле-вызовы.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема не могу удалить BOOKMARK через OLE.
СообщениеДобавлено: Пт, дек 18 2009, 10:05 
Специалист
Специалист

Зарегистрирован:
Ср, апр 29 2009, 07:08
Сообщения: 197
Откуда: AUS RUSSLAND
Пол: Мужской
Цитата:
Code:
Delete method as it applies to the Range and Selection objects.

Deletes the specified number of characters or words. This method returns a Long value that indicates the number of items deleted, or it returns 0 (zero) if the deletion was unsuccessful.

expression.Delete(Unit, Count)
expression    Required. An expression that returns one of the above objects.

Unit   Optional Variant. The unit by which the collapsed range or selection is to be deleted. Can be one of the following WdUnits constants: wdCharacter (default) or wdWord.

Count   Optional Variant. The number of units to be deleted. To delete units after the range or selection, collapse the range or selection and use a positive number. To delete units before the range or selection, collapse the range or selection and use a negative number.


Каким образом создана закладка? здесь могут быть 2 варианта:
1) Создаете закладку в документе просто позиционировавшись на определенном месте, тогда после выполнения вашего кода, выделение перемещается в позицию и происходит удаление одного символа
2) Выделяете какой-то фрагмент текста, делаете создание закладки, тогда после выполнения кода в выделение должен попадать весь фрагмент текста, тогда удаление одного символа повлечет удаление фрагмента


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема не могу удалить BOOKMARK через OLE.
СообщениеДобавлено: Пт, дек 18 2009, 10:07 
Специалист
Специалист

Зарегистрирован:
Ср, апр 29 2009, 07:08
Сообщения: 197
Откуда: AUS RUSSLAND
Пол: Мужской
Если все делаете по второму варианту, то можно попробовать перед вызовом удаления сделать:
Code:
Selection.Select


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема не могу удалить BOOKMARK через OLE.
СообщениеДобавлено: Пт, дек 18 2009, 10:27 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, дек 23 2005, 13:28
Сообщения: 113
Откуда: Южно-Сахалинск
Закладки заранее определены в шаблоне документа. тоесть
1.в зависимости от параметров в программе получаем имя закладки текст в которой нада удалить
2.переходим по этой закладке, когда переходим она автоматом выделяет кусок текста
3.удаляем выделенный текст.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема не могу удалить BOOKMARK через OLE.
СообщениеДобавлено: Пт, дек 18 2009, 10:38 
Специалист
Специалист

Зарегистрирован:
Ср, апр 29 2009, 07:08
Сообщения: 197
Откуда: AUS RUSSLAND
Пол: Мужской
Crasher написал(а):
2.переходим по этой закладке, когда переходим она автоматом выделяет кусок текста

Значит, закладка создана к фрагменту, соответственно у вас скорей всего не происходит выделение этого фрагмента (автоматом) и вы не можете его удалить, если не поможет то что писал выше может вообще стоит проверить происходит ли переход к закладке в документе после приведенного кода,может вообще он понимает обращение только по идентификатору, а не по имени закладки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема не могу удалить BOOKMARK через OLE.
СообщениеДобавлено: Пт, дек 18 2009, 10:51 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, дек 23 2005, 13:28
Сообщения: 113
Откуда: Южно-Сахалинск
хм... ну вроде на MSDN-е написано что можно и по имени и по индексу переходить на закладки.

Use Bookmarks(index), where index is the bookmark name or index number, to return a single Bookmark object. You must exactly match the spelling (but not necessarily the capitalization) of the bookmark name. The following example selects the bookmark named "temp" in the active document.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема не могу удалить BOOKMARK через OLE.
СообщениеДобавлено: Пт, дек 18 2009, 10:57 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, ноя 12 2004, 10:44
Сообщения: 370
Откуда: Москва
вот работающий пример, удаляющий список bookmarks
Code:
      loop at ex_bookmarks into ex_Bookmark.
          CALL METHOD OF lcl_doc=>document_obj 'Bookmarks' = Bookmarks NO FLUSH.
          check sy-subrc eq 0.
          get PROPERTY OF Bookmarks 'Item' = bookmark NO FLUSH EXPORTING #1 = ex_Bookmark .
          check sy-subrc eq 0.
          call method of Bookmark 'Select' NO FLUSH.
          check sy-subrc eq 0.
          get PROPERTY OF lcl_doc=>document_obj 'ActiveWindow' = window NO FLUSH.
          check sy-subrc eq 0.
          GET PROPERTY OF window 'Selection' = selection NO FLUSH.
          check sy-subrc eq 0.
          call METHOD of selection 'Delete'.
      endloop.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема не могу удалить BOOKMARK через OLE.
СообщениеДобавлено: Пт, дек 18 2009, 12:20 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, дек 23 2005, 13:28
Сообщения: 113
Откуда: Южно-Сахалинск
it_z-name_z = 'ZAKL1'.
append it_z.
it_z-name_z = 'ZAKL1_1'.
append it_z.
it_z-name_z = 'ZAKL2'.
append it_z.
it_z-name_z = 'ZAKL3'.
append it_z.
it_z-name_z = 'ZAKL4'.
append it_z.
it_z-name_z = 'ZAKL5'.
append it_z.
it_z-name_z = 'ZAKL6'.
append it_z.
it_z-name_z = 1.
append it_z.
it_z-name_z = 2.
append it_z.
it_z-name_z = 3.
append it_z.
it_z-name_z = 4.
append it_z.
it_z-name_z = 5.
append it_z.
it_z-name_z = 6.
append it_z.
it_z-name_z = 7.
append it_z.

loop at it_z.
WORD_OBJ = APP-OBJ.
GET PROPERTY OF WORD_OBJ 'Application' = APP_OBJ.
CALL METHOD OF APP_OBJ 'Bookmarks' = BOOKMARKS_OBJ NO FLUSH.
check sy-subrc eq 0.
get PROPERTY OF BOOKMARKS_OBJ 'Item' = BOOKMARK_OBJ NO FLUSH EXPORTING #1 = it_z-name_z .
check sy-subrc eq 0.
call method of BOOKMARK_OBJ 'Select' NO FLUSH.
check sy-subrc eq 0.
get PROPERTY OF WORD_OBJ 'ActiveWindow' = ACTWINDOW_OBJ NO FLUSH.
check sy-subrc eq 0.
GET PROPERTY OF ACTWINDOW_OBJ 'Selection' = SEL_OBJ NO FLUSH.
check sy-subrc eq 0.
call METHOD of SEL_OBJ 'Delete'.
if sy-subrc ne 0.
break-point.
endif.

call METHOD of SEL_OBJ 'Delete'. -> выдаёт sy-subrc = 2. всё остальное sy-subrc = 0

забыл добавить что это всё делается под MS Word 2007
CALL FUNCTION 'FLUSH'.
endloop.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB