Извлечение текста из врезок и копирование его в новый документ

Автор kompilainenn, 7 октября 2016, 14:00

0 Пользователи и 1 гость просматривают эту тему.

rami

Попробуйте так:
Sub Main
Dim oDrawPage, sString$
oDrawPage = ThisComponent.DrawPage
For i = 0 To oDrawPage.count -1
sString = oDrawPage(i).String       'получить текст из врезки
Next
End Sub

economist

Разу уже тема содержит понятие Врезка, то вот и для них аналогичный макрос:

Sub GetTextFromFrames
'  Frames - они же Вставка - Врезка (все варианты)
oFrames = ThisComponent.TextFrames
For i = 0 To oFrames.count -1
sString = oFrames(i).String       'получить текст из врезки
Next
End sub 


Имена Врезок - oFrames(i).Name - можно учитывать при считывании, сортировать для изменения порядка формирования текста итд. 
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Sparkster

Цитата: rami от 24 апреля 2021, 19:14Попробуйте так:
Я вставил код, но при выполнении выскакивает ошибка (скриншот во вложении).

Цитата: economist от 24 апреля 2021, 19:34Имена Врезок - oFrames(i).Name - можно учитывать при считывании, сортировать для изменения порядка формирования текста итд.
Ваш макрос запускается, но ничего не происходит. Возможно, я не разобрался как сортировать порядок формирования текста.

Во вложении прикладываю образец текста


rami

Цитата: Sparkster от 24 апреля 2021, 20:34Я вставил код, но при выполнении выскакивает ошибка (скриншот во вложении).
Наверно в вашем оригинальном документе есть что-то ещё кроме врезок, но вариант от economist, должен работать.

Цитата: Sparkster от 24 апреля 2021, 20:34... макрос запускается, но ничего не происходит
Происходит то, что не видно — полученные данные записываются в переменную sString, вставьте msgbox в код (если врезок будет много, утомитесь закрывать сообщения ;D):
Sub GetTextFromFrames
'  Frames - они же Вставка - Врезка (все варианты)
oFrames = ThisComponent.TextFrames
For i = 0 To oFrames.count -1
sString = oFrames(i).String       'получить текст из врезки
msgbox(sString)                      'вывести в сообщение
Next
End sub

Sparkster

Цитата: rami от 24 апреля 2021, 21:41Наверно в вашем оригинальном документе есть что-то ещё кроме врезок, но вариант от economist, должен работать.
К сожалению, ничего не поменялось. Пример куска документа в сообщении https://forumooo.ru/index.php/topic,5901.15/msg,58213.html
Возможно это не врезки, но похожи на нее.

bigor

Цитата: Sparkster от 24 апреля 2021, 23:53Возможно это не врезки
-врезки это. И последний макрос нормально их отображает. Смотрите приложенный файл
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Sparkster

Цитата: Bigor от 25 апреля 2021, 09:35-врезки это. И последний макрос нормально их отображает. Смотрите приложенный файл
Запустил макрос из файла, который вы приложили к сообщению. После нажатия кнопки пуск я последовательно получил сообщения о врезках, которые нашел скрипт. А дальше что делать? Мне же нужно получить обычный текст.

bigor

Цитата: Sparkster от 25 апреля 2021, 11:12А дальше что делать?
ну это Вам виднее, можно сцепить все выводы msgbox в одну строку.
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Sparkster

Получается, что макрос просто показывает где находятся врезки? Я и без него знал это.
Цитата: Bigor от 25 апреля 2021, 11:34ну это Вам виднее, можно сцепить все выводы msgbox в одну строку.
Как это сделать?

bigor

Как вариант:
Sub GetTextFromFrames
'  Frames - они же Вставка - Врезка (все варианты)
oFrames = ThisComponent.TextFrames
sAll=""
For i = 0 To oFrames.count -1
sString = oFrames(i).String       'получить текст из врезки
sAll = sAll+" "+sString
Next
msgbox(sAll)                      'вывести в сообщение
End Sub
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Sparkster

Цитата: Bigor от 25 апреля 2021, 12:06Как вариант:
Выскакивает пустой месседж бокс и ничего не происходит

bigor

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Sparkster

Цитата: Bigor от 25 апреля 2021, 12:21Смотрите в файле
Скрипт выдает все врезки в месседж боксе. А как скопировать весь текст и перенести в новый документ?

eeigor

Вы можете весь полученный (собранный) текст скопировать в буфер обмена (через объект XTransferable) и потом вручную вставить, куда нужно. В сети есть готовый код для копирования.
Код вам будет непонятен, но есть пример вызова (пройдите по ссылке и прокрутите вниз), и вникать в него особого смысла нет. Такой код, ИМХО, пишут не пользователи, а разработчики, которые сами и создали такую ситуацию непонимания :) LubreOffice API сложен для восприятия. Но мы им всё равно признательны...
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

bigor

Цитата: Sparkster от 25 апреля 2021, 12:57А как скопировать весь текст и перенести в новый документ?
Вы бы все хотелки сразу описали бы :) Смотрите файл. Возможно придется путь сохранения файла с текстом исправить

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут