RAN
Участник

Offline
Расположение: Н. Новгород
Сообщений: 40
Мяв? Мяв!
|
Приветствую. Написал макрос для 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
|
Вообще-то, для поиска файлов лучше было бы использовать функцию ReadDirectories() из стандартной библиотеки Tools (модуль UCB) или, на худой конец, пример из Справки Функция Dir [время выполнения]
В той же Справке, в разделе Инструкции циклов перечислены конструкции, которые Basic может выполнять: Инструкция Do...Loop [время выполнения] Инструкция For...Next [время выполнения] Инструкция While...Wend [время выполнения]
Никакого For Each там нет...
|
|
|
Записан
|
|
|
|
RAN
Участник

Offline
Расположение: Н. Новгород
Сообщений: 40
Мяв? Мяв!
|
вообще, стандартный For...Next предусматривает 2 варианта for ... to next и for each in next ну не видит ОО последнюю конструкцию, ну и тьфу. но этот вопрос между прочим... Как по основной проблеме? подскажите, или нет?
|
|
|
Записан
|
|
|
|
JohnSUN
|
Да не вопрос! Конечно же подскажем. Вот только Т.е. нужно открыть doc(x) или odt и считать текст в переменную.
И что? Задача-то в чем состоит? Собрать данные из пачки документов в какой-то папке и слепить какой-то общий документ, что ли? Если так, то в каком порядке перебирать документы? По имени, по дате создания, по дате изменения?.. Весь ли контент - от первого абзаца до последнего - перекидывать в итоговый документ или нужен какой-то отбор?
|
|
« Последнее редактирование: 1 Ноябрь 2014, 20:46 от JohnSUN »
|
Записан
|
|
|
|
RAN
Участник

Offline
Расположение: Н. Новгород
Сообщений: 40
Мяв? Мяв!
|
Собрать данные из пачки документов в какой-то папке и слепить какой-то общий документ - да каком порядке перебирать документы? - в любом Весь ли контент -да
Точнее, мне нужно прочитать все, а достать нужное я смогу. Массивы, коллекции, словари рулят.
PS там еще несколько типов файлов, но для них Word или Writer не требуется.
|
|
« Последнее редактирование: 1 Ноябрь 2014, 21:51 от RAN »
|
Записан
|
|
|
|
JohnSUN
|
Массивы, коллекции, словари рулят.
Я за них рад... Но речь шла о таблицах, рисунках, диаграммах, стилях, форматировании...
|
|
|
Записан
|
|
|
|
RAN
Участник

Offline
Расположение: Н. Новгород
Сообщений: 40
Мяв? Мяв!
|
речь шла о таблицах, рисунках, Где? Мне нужен только текст (string) strText = ff.Range.Text меня вполне устраивает
|
|
« Последнее редактирование: 1 Ноябрь 2014, 22:47 от RAN »
|
Записан
|
|
|
|
JohnSUN
|
Может, конечно, и устраивает, но "нет такой буквы в этом слове"... Еще когда прочитал вообще, стандартный For...Next предусматривает 2 варианта...
хотел переспросить - для кого стандартный? Если пишешь на StarBasic - забудь VBA как страшный сон... И уж тем более старайся не вспоминать о нём на форуме. Меня напрягла формулировка Написал макрос для Excel... ...осталась проблема, как заменить Word на Writer?
Поскольку в задачу углубляться не стал, то сам виноват - получай такое решение...
|
|
|
Записан
|
|
|
|
RAN
Участник

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

Offline
Расположение: Н. Новгород
Сообщений: 40
Мяв? Мяв!
|
Предыдущее сообщение чуть поправил. По детализации При обращении к 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
|
Если пишешь на 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. Все упоминания Питоньяка - ссылки.
|
|
|
Записан
|
|
|
|
RAN
Участник

Offline
Расположение: Н. Новгород
Сообщений: 40
Мяв? Мяв!
|
Шкипер, еще не смотрел, но, думаю, оно самое! Это моя 2 попытка работы с ОО. При поиске по моим запросам на 90 процентов ответы были твои. Пусть иногда чуть более фрагментарные, чем хотелось, но были. Так что, как говорит нынешний молодняк, "респект и уважуха"!
|
|
|
Записан
|
|
|
|
JohnSUN
|
[оффтоп оn]Честно признайся усатый - хочешь лишиться хвоста?.. Насчет 90% - явное преувеличение: "писуч", конечно, но не настолько же! Почему провалилась первая попытка? Неужто этого форума тогда не существовало?.. [оффтоп офф] Всё-таки не понимаю основную задумку проекта. Из-под электронной таблицы перебрать текстовые документы, выдрать из них тексты и... И что?
|
|
|
Записан
|
|
|
|
RAN
Участник

Offline
Расположение: Н. Новгород
Сообщений: 40
Мяв? Мяв!
|
Пропарсить все тексты, выделить уникальные, и собрать в единый txt. Это все работает, была проблема только с чтением doc и odt при отсутствии Word. txt все равно через fso читаются. Почему провалилась первая попытка? Нужда отпала.
|
|
« Последнее редактирование: 4 Ноябрь 2014, 13:35 от RAN »
|
Записан
|
|
|
|
|