Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Как вытащить текст из Word'a?

Автор: madm
Дата сообщения: 01.09.2003 16:20
Столкнулся тут с такой проблемой: нужно вытащить из ворда текст и сохранить его с xml файлик. Вытаскивать нужно только текст, но со свойствами шрифта.
Написал так: перебираю параграфы и для каждого беру свойства шрифта первой буквы и собственно текст параграфа. Таким образом я теряю оформление текста внутри параграфа... в принципе и фиг то с ним. Меня беспокоит то что даже простой пербор параграфов:

Код:
Variant MSWord = Variant::CreateObject("Word.Application");
MSWord.OlePropertySet("Visible", false);
Variant DocCollection = MSWord.OlePropertyGet("Documents");
DocCollection.OleFunction("Open", FileName);
Variant ActiveDoc = MSWord.OlePropertyGet("ActiveDocument");
Variant Paragraphs = ActiveDoc.OlePropertyGet("Paragraphs");
unsigned i = 1, PCount = Paragraphs.OlePropertyGet("Count");
while(i<=PCount)
{
CurPar = Paragraphs.OleFunction("Item", i);
i++;
}
Автор: Sleepwalker
Дата сообщения: 02.09.2003 07:43
а если затолкать весь текст в поток(или в любом другом виде в память), и оттуда уже читать.
Автор: madm
Дата сообщения: 02.09.2003 09:52
Как?
я пробовал делать тоже самое что выше написано в несколько потоков - ускороние на 1-2 минуты... Это как понимаешь проблемы не решает
Сейчас даже пытаюсь читать несколькими процессами...
Автор: redp
Дата сообщения: 02.09.2003 09:58
а ты сделай так - напиши macros на VBA, и запускай его через Word OLE Automation - пусть в файлик все скинет, ты потом из файла все что нужно и вычитаешь
Тупит оно у тебя патамучта Word - это отдельный процесс
Соотв-но при OLE automation 90% времени тратитца на marshalling между процессами
А так твой VBA macros будет работать внутри того же процесса - должно стать сильно быстро
Автор: Sleepwalker
Дата сообщения: 02.09.2003 11:42
а такими темпами можно посмотреть формат RTF и читать напрямую из файла...
Автор: madm
Дата сообщения: 02.09.2003 14:21
redp
Я как только увидел как все это тормозит сразу попробовал макрос написать. Так вот, получилось что простой перебор параграфоф занимает много времени! А именно

Код:

Set WordDocument = Word.Documents.Item(1)
parCount = WordDocument.Paragraphs.Count
For i = 1 To parCount
CurPar = WordDocument.Paragraphs.Item(i)
Next i
Автор: Tropin
Дата сообщения: 14.11.2003 11:53
У меня немного другой вопрос: Как посредством VBA скопировать текст из выделенного фрагмента в указанное место с сохранением форматьирования без использования буфера обмена...


Добавлено
точнее на VBA уже нашел "Selection.FormattedText", но я использую OLEObject Delphi и мне на присвоение отвечает "Несоответствие типов"...

Добавлено
Извиняюсь... проблему решил сам...
Просто я после присвоения переменной сразу закрывал документ поэтому при копировании информация терялась...

Страницы: 1

Предыдущая тема: Определение размера файла в Delphi


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.