Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

9 Март 2021, 10:19 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 3 »   Вниз
  Печать  
Автор Тема: Программно прочитать текст  (Прочитано 11255 раз)
0 Пользователей и 1 Гость смотрят эту тему.
RAN
Участник
**
Offline Offline

Расположение: Н. Новгород
Сообщений: 40

Мяв? Мяв!


« Стартовое сообщение: 1 Ноябрь 2014, 11:29 »

Приветствую.
Написал макрос для Excel, но, оказалось, что для тех, кому писал макрос, что MS ofis, что ОО - без разницы.
И MS ofis у них отсутствует.

Сам макрос обработки под ОО отладил, осталась проблема, как заменить Word на Writer?
Код:
Set wa = CreateObject("Word.Application")
    Do While sFile <> ""
        '    For Each ff In fld.Files
        If Mid$(sFile, InStrRev(sFile, ".") + 1) Like "doc*" _
        Or Mid$(sFile, InStrRev(sFile, ".") + 1) Like "odt*" Then
            '        If fso.GetExtensionName(ff.Path) Like "doc*" Then
            '            Set ff = wa.Documents.Open(ff.Path)
            Set ff = wa.Documents.Open(ThisWorkbook.Path & "\" & sFile)
            strText = ff.Range.Text
            ff.Close False
Т.е. нужно открыть doc(x) или odt и считать текст в переменную.

И справочный вопрос
почему не работает строка
Код:
For Each ff In fld.Files
если fld.Files.Count считает (пришлось от FSO отказаться)
Код:
fld.Files.Count = 5
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #1: 1 Ноябрь 2014, 12:10 »

Вообще-то, для поиска файлов лучше было бы использовать функцию ReadDirectories() из стандартной библиотеки Tools (модуль UCB) или, на худой конец, пример из Справки Функция Dir [время выполнения]

В той же Справке, в разделе Инструкции циклов перечислены конструкции, которые Basic может выполнять:
Инструкция Do...Loop [время выполнения]
Инструкция For...Next [время выполнения]
Инструкция While...Wend [время выполнения]

Никакого For Each там нет...
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
RAN
Участник
**
Offline Offline

Расположение: Н. Новгород
Сообщений: 40

Мяв? Мяв!


« Ответ #2: 1 Ноябрь 2014, 20:37 »

вообще, стандартный For...Next предусматривает 2 варианта
Код:
for ... to
next
и
Код:
for each in
next
ну не видит ОО последнюю конструкцию, ну и тьфу.
но этот вопрос между прочим...

Как по основной проблеме?
подскажите, или нет?
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #3: 1 Ноябрь 2014, 20:43 »

Да не вопрос! Конечно же подскажем. Вот только
Т.е. нужно открыть doc(x) или odt и считать текст в переменную.
И что? Задача-то в чем состоит?
Собрать данные из пачки документов в какой-то папке и слепить какой-то общий документ, что ли?
Если так, то в каком порядке перебирать документы? По имени, по дате создания, по дате изменения?..
Весь ли контент - от первого абзаца до последнего - перекидывать в итоговый документ или нужен какой-то отбор?
« Последнее редактирование: 1 Ноябрь 2014, 20:46 от JohnSUN » Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
RAN
Участник
**
Offline Offline

Расположение: Н. Новгород
Сообщений: 40

Мяв? Мяв!


« Ответ #4: 1 Ноябрь 2014, 21:36 »

Собрать данные из пачки документов в какой-то папке и слепить какой-то общий документ - да
каком порядке перебирать документы? - в любом
Весь ли контент -да

Точнее, мне нужно прочитать все, а достать нужное я смогу.
Массивы, коллекции, словари рулят.

PS там еще несколько типов файлов, но для них Word или Writer не требуется.
« Последнее редактирование: 1 Ноябрь 2014, 21:51 от RAN » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #5: 1 Ноябрь 2014, 21:42 »

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

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
RAN
Участник
**
Offline Offline

Расположение: Н. Новгород
Сообщений: 40

Мяв? Мяв!


« Ответ #6: 1 Ноябрь 2014, 21:53 »

речь шла о таблицах, рисунках,
Где?
Мне нужен только текст (string)
Код:
strText = ff.Range.Text
меня вполне устраивает
« Последнее редактирование: 1 Ноябрь 2014, 22:47 от RAN » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #7: 2 Ноябрь 2014, 00:57 »

Может, конечно, и устраивает, но "нет такой буквы в этом слове"...
Еще когда прочитал
вообще, стандартный For...Next предусматривает 2 варианта...
хотел переспросить - для кого стандартный? Если пишешь на StarBasic - забудь VBA как страшный сон... И уж тем более старайся не вспоминать о нём на форуме.
Меня напрягла формулировка
Написал макрос для Excel...
...осталась проблема, как заменить Word на Writer?
Поскольку в задачу углубляться не стал, то сам виноват - получай такое решение...

* Собрать данные.odt (18.28 Кб - загружено 18 раз.)
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
RAN
Участник
**
Offline Offline

Расположение: Н. Новгород
Сообщений: 40

Мяв? Мяв!


« Ответ #8: 3 Ноябрь 2014, 21:55 »

Капитана в тот день называли на "ты"
Шкипер с юнгой сравнялись талантом...

Прекрасный пример. Великолепно откомментирован.
Премного благодарен. С большим удовольствием изучил.
Надеюсь, пригодится многим.
За это
Функция Dir
прошу прощения отдельно, ибо это (точнее, применение другого метода) было единственное, что мешало коду VBA работать в ОО.
Если пишешь на StarBasic - забудь VBA как страшный сон
Не совсем согласен.
При работе с листом - там однозначно ДА.
В в данном случае - нет.
Мои вопросы остались открыты
Могу попробовать детализировать вопросы, если уточнения будут рассмотрены.
« Последнее редактирование: 3 Ноябрь 2014, 22:07 от RAN » Записан
Yakov
Администратор
**
Offline Offline

Сообщений: 2 568


WWW
« Ответ #9: 3 Ноябрь 2014, 22:06 »

Могу попробовать конкретизировать вопросы.
Давайте.
« Последнее редактирование: 3 Ноябрь 2014, 22:13 от Yakov » Записан
RAN
Участник
**
Offline Offline

Расположение: Н. Новгород
Сообщений: 40

Мяв? Мяв!


« Ответ #10: 3 Ноябрь 2014, 22:32 »

Предыдущее сообщение чуть поправил.
По детализации
При обращении к Word из Excel, Word стороннее приложение.
Требуется создание экземпляра
Код:
Set wa = CreateObject("Word.Application")
При этом приложение в режиме Visible =False
При расположении кода в файле Calc, является ли Writer сторонним приложением, если да, то какой строкой вызвать? Как переключить видимость?
Аналогично, но код расположен в файле Excel или VBS.
При открытии файла
oDoc = OpenDocument(listOfFiles(i,0), Array())   ' Открываем документ (можно было бы сделать это "невидимо")
Как сделать "невидимо", что за параметр ", Array()"?
Можно ли ссылку для почитать? Желательно на русском.
С поиском в инете у меня и так проблемы, а в ОО еще и F1 как-то не правильно функционирует.

PS использую LibreOffice 3.5
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #11: 3 Ноябрь 2014, 23:35 »

Если пишешь на StarBasic - забудь VBA как страшный сон
Не совсем согласен.
Да, я тут подумал, что тоже не совсем согласен... Не "как страшный", а "как кошмарный". Впрочем, неважно как именно забывать - главное забыть попрочнее.
Я совершенно серьёзно! Сам ковылял от оператора к оператору, пока пытался скормить OpenOffice VBA-образный код. Потом почитал Питоньяка, плюнул и начал практически с нуля. Другими словами - забыл VBA и всё начало получаться. (Само собой, забыл не до конца, только на время работы с LibreOfice - если работаю с MSOfice, то всё помню)
Дело в том, что навыки кодирования в VBA очень мешают - подавляющее большинство удобств того языка заточено под модель MS-форматов. У ODF - иная модель, почти все привычные фишки из VBA здесь пишутся совсем иначе.
При работе с листом - там однозначно ДА.
В данном случае - нет.
Ага... Про отсутствующий в языке For Each вспоминать не будем...
При расположении кода в файле Calc, является ли Writer сторонним приложением, если да, то какой строкой вызвать? Как переключить видимость?
Как сделать "невидимо", что за параметр ", Array()"?
Можно ли ссылку для почитать? Желательно на русском.
1. Нет, это еще одно "окно" (это мой очень грубый перевод "фрейма") для общего процесса soffice.bin.
2. Несколько вариантов - как для открытия существующего, так и для создания нового. На любой вкус.
3. Установить PropertyValue с именем "Hidden" в True (Listing 5.21: Merge all documents in a single directory into one. Это у Питоньяка)
4. Array() - функция StarBasic для создания массива. Без параметров создаёт пустой массив. Другими словами, OpenDocument в примере макроса вызывается без особых параметров. А тебе вместо пустого массива нужно будет передать массив из одного (как минимум) элемента PropertyValue. Подробности - у Питоньяка)
5. Все упоминания Питоньяка - ссылки.
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
RAN
Участник
**
Offline Offline

Расположение: Н. Новгород
Сообщений: 40

Мяв? Мяв!


« Ответ #12: 4 Ноябрь 2014, 00:12 »

Шкипер, еще не смотрел, но, думаю, оно самое!
Это моя 2 попытка работы с ОО.
При поиске по моим запросам на 90 процентов ответы были твои. Пусть иногда чуть более фрагментарные, чем хотелось, но были.
Так что, как говорит нынешний молодняк, "респект и уважуха"!


* 1353846594_duet-chernogo-kota-i-pirata.jpg (37.42 Кб, 450x354 - просмотрено 12 раз.)
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #13: 4 Ноябрь 2014, 13:26 »

[оффтоп оn]Честно признайся усатый - хочешь лишиться хвоста?..
Насчет 90% - явное преувеличение: "писуч", конечно, но не настолько же!
Почему провалилась первая попытка? Неужто этого форума тогда не существовало?.. [оффтоп офф]
Всё-таки не понимаю основную задумку проекта. Из-под электронной таблицы перебрать текстовые документы, выдрать из них тексты и... И что?
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
RAN
Участник
**
Offline Offline

Расположение: Н. Новгород
Сообщений: 40

Мяв? Мяв!


« Ответ #14: 4 Ноябрь 2014, 13:33 »

Пропарсить все тексты, выделить уникальные, и собрать в единый txt.
Это все работает, была проблема только с чтением doc и odt при отсутствии Word.
txt все равно через fso читаются.

Почему провалилась первая попытка?
Нужда отпала.
« Последнее редактирование: 4 Ноябрь 2014, 13:35 от RAN » Записан
Страниц: 1 2 3 »   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!