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);

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

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


Babay   (2004-10-19 08:18:00) [1]

Сходи сюда может поможет
http://delphiworld.narod.ru/base/get_rtf_from_msword.html
http://delphiworld.narod.ru/base/ins_rtf_to_msword.html
статейка называтся
Взять RTF-текст из запущенного MS Word без использования буфера обмена  


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

а вообще есть хороший форум по автоматизации офисных продуктов?

по идее, это уже выходит за рамки Delphi...


YurikGL   (2004-10-13 19:26:00) [3]


> ИМХО ©   (13.10.04 17:27) [40]

1) Послать команду "пшел курсор в конец документа" и считать его позицию
2) Выбрать весь документ и считать end у selection
3) Возможно WordApplication1.ActiveDocument.Characters.Count;
....
Фантазируй. :-)


ИМХО   (2004-10-13 17:27:00) [4]

понятно.
а как таки узнать позицию последнего символа в документе?


YurikGL   (2004-10-13 14:18:00) [5]


> ИМХО ©   (13.10.04 09:15) [37]

Это как сам решишь :-)

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

А еще, это - сила привычки.


ИМХО   (2004-10-13 14:15:00) [6]

ась?


ИМХО   (2004-10-13 09:15:00) [7]


> YurikGL ©   (12.10.04 15:23) [35]
>
> > почему некоторые (например, YurikGL) так любят ранне связывание?
>
> Да вроде работает быстрее, хотя и глючнее.


а что лучше: быстрее, но глючнее, или медленнее, но надежнее?


ИМХО   (2004-10-12 17:06:00) [8]

Господа!
Последняя заморочка осталась.

Таблы с сохранением последней закладки.
Как узнать позицию последнего символа в документе?
(иначе опять - "Выделенного текста нет")


YurikGL   (2004-10-12 15:23:00) [9]


> почему некоторые (например, YurikGL) так любят ранне связывание?

Да вроде работает быстрее, хотя и глючнее. А по поводу привязки, использую 2000-е компоненты, проблем не встречал ни разу.


ИМХО   (2004-10-12 14:59:00) [10]

кстати, давно хотел узнать, почему некоторые (например, YurikGL) так любят ранне связывание?

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


ИМХО   (2004-10-12 14:52:00) [11]

TStrings и MS Word... несерьезно это как-то...

вордовский формат - это бинарный формат, его в TStrings не запихнешь.

другое дело, если бы RTF...
он текстовый, но описывает форматирование и прочие заморочки


YurikGL   (2004-10-12 14:40:00) [12]


> ИМХО ©   (12.10.04 10:02) [27]
> спасибо, но мне кажется, это бред
>
> пусть YurikGL выскажется

Не проверял, но ИМХО работать будет. Однако же проблемы это не решает.


Babay   (2004-10-12 12:42:00) [13]

З.Ы. вот еще подумалось а может открыть документ убрать все НЕНУЖНОЕ и сохранить как....  Хотя тоже не очень красиво и кривовато :-(


Babay   (2004-10-12 12:30:00) [14]

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


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

нет, фишка в том, что форматирование ОЧЕНЬ НУЖНО. Ворд хорош форматированием (и не только им)


Babay   (2004-10-12 11:03:00) [16]

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

З.Ы. Сам бы проверил да некогда, а вот тебе как раз на это время убить можно. Не надо голословно заявлять что это бред.


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

спасибо, но мне кажется, это бред

пусть YurikGL выскажется


Babay   (2004-10-12 09:52:00) [18]

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

Импорт активного документа Word
--------------------------------------------------------------------------------

Автор: Dimka Maslov
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Импорт активного документа Word

Импортирует текст активного документа Word в объект класса TStrings
(без форматирования). Если при открытом Worde результат отрицательный -
рекомендуется перезапустить приложение, поскольку дальнейшие вызовы
функции в подавляющем большинстве случаев будут приводить к ошибке

Зависимости: OleServer, Word97
Автор:       Dimka Maslov, mainbox@endimus.com, ICQ:148442121, Санкт-Петербург
Copyright:   Dimka Maslov
Дата:        6 февраля 2004 г.
***************************************************** }

function ImportWordActiveDocument(Strings: TStrings): Boolean;
var
 Word: TWordApplication;
 Start, End_: Integer;
begin
 Result := True;
 try
   Word := TWordApplication.Create(nil);
   try
     Word.AutoConnect := False;
     Word.AutoQuit := False;
     Word.ConnectKind := ckRunningInstance;
     Word.Connect;
     Start := Word.Selection.Get_Start;
     End_ := Word.Selection.Get_End_;
     Word.Selection.SetRange(0, $7FFFFFFF);
     Strings.Text := Word.Selection.Text;
     Word.Selection.SetRange(Start, End_);
     Word.Disconnect;
   finally
     Word.Free;
   end;
 except
   Result := False;
 end;
end;

// Пример использования:
if not ImportWordActiveDocument(Memo1.Lines) then
 ShowMessage('Error');


Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay


ИМХО   (2004-10-12 09:41:00) [19]

да, он уже готовый, с закладками

нужно вырвать некоторые куски и сохранить их на диск


Babay   (2004-10-12 05:57:00) [20]

А как формируется документ, ежели не секрет? Сам формируешь или он уже готовый в каком то виде? Может опишешь немного задачу и найдется другое (красивое) решение?


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

Наверх

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