Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Набор закладок в вордовском документе


Страницы:   1 2 3

ИМХО ©   (2004-10-06 22:09:00) 

Здравствуйте.

Ситуация такова: имеется вордовский документ, с которым я работаю через OLE-автоматизацию.

Задача: получить список закладок, но не по имени, а по положению.

Дело в том, что если делать так:
 WD := CreateOleObject('Word.Application');
 WD.Visible := False;
 WD.Documents.Open('документ.doc');
 BookM_Count := WD.ActiveDocument.Bookmarks.Count;
 for I := 1 to BookM_Count do
   ListBox.Items.Add(WD.ActiveDocument.Bookmarks.Item(I).Name);

то получаем список по имени.

Как получить список закладок по положению в документе???


ИМХО   (2004-10-11 21:15:00) [21]

да, наверное, ты прав.
наверное, я слишком многого хочу.
скромнее нужно быть...


YurikGL   (2004-10-11 19:59:00) [22]


> ИМХО ©   (11.10.04 13:39) [20]

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

Максимум, что я могу еще посоветовать - анализ выбранного текста+формирование нового документа не средствами ворд, а ручками... Или еще один невидимый ворд запустить...


ИМХО   (2004-10-11 17:56:00) [23]

up!


ИМХО   (2004-10-11 13:39:00) [24]

А как всё-таки обойтись без танцев с бубном?

Я имею в виду, не сохранять в буфер, а затем выдергивать из него, а сохранять содержимое закладки напрямую на диск?

Метод SaveAs относится к объекту Document.
WD.Selection имеет свойство Document.

Но когда я делаю так:
WD.Selection.Document.SaveAs

этот, пардон, чудак на букву М сохраняет ВЕСЬ документ.


YurikGL   (2004-10-11 12:59:00) [25]


> ИМХО ©   (11.10.04 12:53) [16]
> как это всё не по людски...
>
> решение должно быть красивым, с использованием минимального
> кол-ва кода

Ну можешь попробовать в самом ворде закладки отсортировать :-) А так, кода ИМХО не так уж и много...


Babay   (2004-10-11 12:58:00) [26]

>>это хороший способ, но я юзаю закладки по положению, а не по имени.

????????
а я тебе что предложил? или я чего не понял?
I это одна закладка I+1 я имел ввиду следующуу за ней по положению.  Наверное я просто неверно выразил свою мысль.

в общем наверное YurikGL ©   (11.10.04 12:49) [15] точнее выразился.


ИМХО   (2004-10-11 12:55:00) [27]


> YurikGL ©   (11.10.04 12:20) [11]
> Кстати, я использую компоненты и у меня end_ идет с подчеркиванием.


end_нету в Microsoft Word Visual Basic Reference


ИМХО   (2004-10-11 12:53:00) [28]

как это всё не по людски...

решение должно быть красивым, с использованием минимального кол-ва кода


YurikGL   (2004-10-11 12:49:00) [29]


> ИМХО ©   (11.10.04 12:44) [14]


Сначала пробегаешься по всем закладкам, в массив сохраняешь их start-ы. Потом массив сортируешь. Далее пробегаешься по отсортированному массиву. В чем проблемы?


ИМХО   (2004-10-11 12:44:00) [30]


> YurikGL ©   (11.10.04 12:12) [10]
>
> > ИМХО ©   (11.10.04 12:02) [7]
>
> Дык ты выделяй текст между закладками...


Как, маэстро?????


ИМХО   (2004-10-11 12:43:00) [31]


> Babay ©   (11.10.04 12:27) [12]


это хороший способ, но я юзаю закладки по положению, а не по имени.


Babay   (2004-10-11 12:27:00) [32]

А если так ?

 Pos := WD.ActiveDocument.Bookmarks.Item(I).Start;
 Pos2 := WD.ActiveDocument.Bookmarks.Item(I+1).Start;
 WD.ActiveDocument.Range(Pos, Pos2).Select;
 WD.Selection.Copy;

У меня так сработало, только надо учесть ситуацию что для последнего значения I нет I+1 поэтому здесь End это конец документа


YurikGL   (2004-10-11 12:20:00) [33]


> по какому-то року Pos и Pos2 равны, и WD.Selection.Copy
> дает ошибку ("Нет выделенного текста")

Когда ставишь закладку, сохраняется текущий выбранный диапазон.  Если у тебя, в момент установки закладки был выбран текст, то в start будет первый символ выбранного текста, а в end_ - последний. Однако если у тебя в момент установки закладки выбранного текста не было, то и в start и в end_ сохранится положение курсора.

Кстати, я использую компоненты и у меня end_ идет с подчеркиванием.


YurikGL   (2004-10-11 12:12:00) [34]


> ИМХО ©   (11.10.04 12:02) [7]

Дык ты выделяй текст между закладками...


ИМХО   (2004-10-11 12:07:00) [35]

так тоже не работает:

     Pos := WD.ActiveDocument.Bookmarks.Item(I).Start;
     Pos2 := WD.ActiveDocument.Bookmarks.Item(I).End;


ИМХО   (2004-10-11 12:03:00) [36]

по какому-то року Pos и Pos2 равны, и WD.Selection.Copy дает ошибку ("Нет выделенного текста")


ИМХО   (2004-10-11 12:02:00) [37]

Не получается выделить закладку и скопировать ее в буфер :(

     Pos := WD.ActiveDocument.Bookmarks.Item(I).Range.Start;
     Pos2 := WD.ActiveDocument.Bookmarks.Item(I).Range.End;
     myRange := WD.ActiveDocument.Range(Pos, Pos2).Select;
     WD.Selection.Copy;


YurikGL   (2004-10-11 11:30:00) [38]


> ИМХО ©   (11.10.04 11:01) [5]

Самый простой способ -
Выделяешь текст между закладками. Пихаешь в буфер. Создаешь новый документ. Из буфера вставляешь нужный кусок. Затем сохраняешь.


ИМХО   (2004-10-11 11:01:00) [39]

YurikGL, привет!

У меня тут с OLE-автоматизацией Ворда проблема за проблемой.
Пытаюсь кусок вордовского файла, заданного закладкой, сохранить на диск?

уже все перепробовал (вроде бы), но он сохраняет весь документна диск.

не подскажешь, как решить проблему?


YurikGL   (2004-10-11 10:30:00) [40]


> ИМХО ©


У WD.ActiveDocument.Bookmarks.item(i). есть свойство start которое характеризует, если не ошибаюсь, номер символа, после которого стоит начало диапазона закладки. Можешь отсортировать по нему.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо