Программно прочитать текст

Автор RAN, 1 ноября 2014, 11:29

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

JohnSUN

Так а Excel и Calc здесь с какого боку?!!
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

RAN

Макрос куда-то надо впихнуть  :)
Мне в Excel проще
Хотя, с переходом на Dir, оно совсем без разницы.

JohnSUN

Ага! Попался!
Одна из заморочек, которые отличают офисы друг от друга - размещение библиотек макросов.
Если мне правильно изменяет память, то "общие" Word'овские макросы пишутся в Normal.dot, а Excel'евские - тоже в какой-то шаблон экселевского формата. Ну, во всяком случае, когда-то так и было...
А вот одна из вкусностей открытого офиса - библиотеки макросов всего офиса (защищенные, "Макросы LibreOffice") и пользовательские (редактируемые, "Мои макросы") содержат ВСЕ макросы, хоть для Calc, хоть для Writer, хоть вообще без привязки к чему-то конкретному... Вот так вот сходу не придумаю чего-нибудь полезного, что работало бы самостоятельно, без документа... Разве что, стандартный "Хэллоу-ворлд" (хотя пользы-то от него!)
И что самое прикольное: имеем право вызвать выполнение макроса без явного запуска офиса, из командной строки, или из bat-файла, или из стороннего приложения... Нравится?

И при всём при том, какой-то специфический макрос-модуль можем не сохранять в "общих" библиотеках, а сохранить в отдельном документе...
В общем, у Питоньяка это всё хорошо расписано - рекомендую!
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

RAN

Без явного запуска офиса и VBS скрипт подходит, но вот файлы не читаются.
А Питоньяка погляжу.

RAN

C помощью шкипера и Питоньяка дожал.
Хотя на 90% - голимый VBA.
Выдирает уникальные email из всех текстовых файлов (doc*, odt, txt)  в отдельный файл txt.

Из интересного
оператор Like у Питоньяка отсутствует как класс, но работает исправно, функция Replace тоже отсутствует, но работает почти правильно (заменяет не все, а только первое найденное).

JohnSUN

Цитата: RAN от  5 ноября 2014, 17:53
C помощью шкипера и Питоньяка дожал.
Дружище, на меня можно не ссылаться - в том, что ты выложил, моих ни одной буквы нет.
Цитата: RAN от  5 ноября 2014, 17:53
Хотя на 90% - голимый VBA.
"Старую суку не научишь новым штукам" (с) Опытные кинологи.
Ты всё равно сохраняешься в xls, всё равно пытаешься писать, как привык... Наличие библиотеки VBAProject-Объекты документа сдаёт тебя с головой... Таки-да, голимый VBA.
Давай попробую сказать всё то же самое, но чуть иначе - если макрос ваяешь под открытый офис, забудь все наработанные навыки!
После просмотра твоего творения, сам Питоньяк возмутился бы! Что это за мутант?
Цитата: RAN от  5 ноября 2014, 17:53
Выдирает уникальные email из всех текстовых файлов (doc*, odt, txt)  в отдельный файл txt.
Вау! Нам - наконец-то! - открыли общий замысел проекта! Всего-то навсего, пополнение базы адресов для спамера...
Это не так? Сорри, виноват, ошибся...
Цитата: RAN от  5 ноября 2014, 17:53
Из интересного
оператор Like у Питоньяка отсутствует как класс, но работает исправно, функция Replace тоже отсутствует, но работает почти правильно (заменяет не все, а только первое найденное).
Ну, блин, сравнил! Документация (перевод) какой датой помечена? А сам офис какого релиза? Тут ведь как ни выпуск, так сразу куча новшеств (и приключений с рефакторингом готового кода)

А так-то, вообще, крут! Честно - крут! Аккуратно, внятно... ни хрена (без комментариев) не понятно... Но крут! Типа, Welcome в хорошую компанию
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

RAN

#21
Цитата: JohnSUN от  5 ноября 2014, 17:11Всего-то навсего, пополнение базы адресов для спамера...
Это не так?
Без понятия. Ни разу не интересовало.
Мне заказали, я сделал. А в ОО перевести - уже мой личный интерес был.
После твоего "забудь VBA" возник уже чисто спортивный интерес - сделать именно на VBA.
То, что можно было сделать иначе, я  в библиотеке "Tools" увидел.
Одна беда с этой библиотекой - разбираться, что там есть, и зачем оно есть.

RAN

Цитата: JohnSUN от  1 ноября 2014, 10:10Никакого For Each там нет...
А маленьких обманывать не хорошо!
У меня в другом месте кода работало и работает (случайно заметил)
А проблема была в том, что ОО с Объект-коллекцией "Files" при записи For Each File In Folder.Files не работает. Хотя так Set File = Folder.Files("AUTOEXEC.BAT") все видит.

JohnSUN

Да никто не обманывал: в том что работают вещи не предусмотренные родным языком виноваты строчки
Rem Attribute VBA_ModuleType=VBAModule
Option VBASupport 1
в начале модуля и соответствующая структура библиотек. Открытый офис старается прикинуться майкрософтовским офисом и это у него получается довольно убедительно.
"Если плохое решение работает, значит не такое оно и плохое..."
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

RAN

Удалил модуль VBA, перенес код в стандартный, удалил строки
Rem Attribute VBA_ModuleType=VBAModule
Option VBASupport 1

Все равно работает!  ;D
Одна беда - документы, открытые с скрытом режиме не хотят полностью закрываться. Остается
.~lock..~lock.Текстовый документ OpenDocument.odt##

JohnSUN

#25
Поведение одинаковое для oDoc.Close и для DisposeDocument (oDoc)?
У Питоньяка это глава 5.8, а в DevGuide пример лежит в конце Closing Documents

PS. А вообще-то и открывать файлы, которые начинаются с .~lock. и заканчиваются "решеткой", совсем не обязательно - искомых емэйлов там точно нет...
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

RAN

При работе из модуля VBA oDoc.Close закрывает, DisposeDocument (oDoc) - нет.
А из стандартного и oDoc.Close не хочет.
Если без использования скрытого режима, из VBA DisposeDocument (oDoc) закрывает.

RAN

Ничёнепонимаю!  :D
Сейчас еще раз запустил (правда с перезагрузкой ОО), работает и то, и другое.

RAN

Итог
Без Option VBASupport 1 работает только до закрытия окна макросов. Оказывается, где то запоминает.
Правильно закрывает командой
oDoc.Close False

JohnSUN

Правда ведь, увлекательнейший процесс?..  ;)
Не стану нудить на тему "А вот если бы сразу не стал переделывать вылизанный VBA-проект, а начал с нуля - вот тогда бы уже давно написал и отладил свежий вариант..." Или всё-таки стану?..
По-хорошему, нужно было бы разложить получившееся решение на составные части, отсечь заведомо лишние куски и пересобрать заново, избегая использования "неродных" приёмов... Но лень. Тем более, что и тема "сбор eMail'ов" какая-то не такая...
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне