Нельзя ли примеры кода с использованием регулярных вы

Автор ForumOOo (бот), 5 июня 2014, 16:32

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

ForumOOo (бот)

Компонент: Basic
Версия продукта: 3.x
Сборка: Apache OpenOffice
ОС: Win7

Нельзя ли примеры кода с использованием регулярных выражений для фильтрации в таблицах, или
ссылку. Нигде ничего не могу найти. И еще не могу зарегистрироваться на форуме. Движки в
проверке не работают.

--
Подпись: Виктор
Эл. почта: apt31_apt31@mail.ru

Helen

Виктор, письмо с данными регистрации отправлено Вам на адрес электронной почты, указанный в Вашем сообщении.

rami

О регулярных выражениях можно почитать в Справке Apache OpenOffice.
Примеры кодов для фильтра можно найти на этом сайте. Забейте в поиск по сайту слово "фильтр". Я видел темы где есть то, что нужно например http://forumooo.ru/index.php/topic,2426.msg14869.html#msg14869

apt31

Этот пост я видел. Очень полезный. Но регулярных выражений для фильтра в нем нет. Справка только для интерфейса. Неужели ни у кого не возникало задачи использовать фильтр програмно с нестрогими условиями поиска
Виктор

apt31

Переделал этот код на поиск строковых значений

REM  *****  BASIC  *****
Sub SimpleSheetFilter_2()
Dim oSheet ' Лист, на котором применен фильтр.
Dim oRange ' диапазон, который будет отфильтрован.
Dim oFilterDesc ' Критерии фильтра.
Dim oFields(0) As New com.sun.star.sheet.TableFilterField

oSheet = ThisComponent.getSheets().getByIndex(0)

oFilterDesc = oSheet.createFilterDescriptor(True)

With oFields(0)
.Field = 0 ' Filter column A.
.IsNumeric = False ' Используется Строковое значение
'.Operator = com.sun.star.sheet.FilterOperator.GREATER 'Оператор- больше
.Operator = com.sun.star.sheet.FilterOperator.EQUAL 'Оператор- равно
.StringValue = "Димедрол" 'Ищется только Димедрол но не "Димедрол 1%/1 мл №10 р-р д/ин.амп."
'Необходимо все ячейки где содержится слово Димедрол. Пробовал критерий "Димедрол.*" как в справке не ищет
End With
oFilterDesc.setFilterFields(oFields())
oSheet.filter(oFilterDesc)
End Sub

rami

Добавил в ваш код две вещи: 1) oFilterDesc.UseRegularExpressions=true   'Эта строка включает рег. выражения
2) .StringValue = ".*Димедрол.*" 'Ищется не только Димедрол но и "Димедрол 1%/1 мл №10 р-р д/ин.амп."


Sub SimpleSheetFilter_2()
Dim oSheet ' Лист, на котором применен фильтр.
Dim oRange ' диапазон, который будет отфильтрован.
Dim oFilterDesc ' Критерии фильтра.
Dim oFields(0) As New com.sun.star.sheet.TableFilterField
oSheet = ThisComponent.getSheets().getByIndex(0)
oFilterDesc = oSheet.createFilterDescriptor(True)
With oFields(0)
.Field = 0 ' Filter column A.
.IsNumeric = False ' Используется Строковое значение
'.Operator = com.sun.star.sheet.FilterOperator.GREATER 'Оператор- больше
.Operator = com.sun.star.sheet.FilterOperator.EQUAL 'Оператор- равно
.StringValue = ".*Димедрол.*" 'Ищется не только Димедрол но и "Димедрол 1%/1 мл №10 р-р д/ин.амп."
'Необходимо все ячейки где содержится слово Димедрол. Пробовал критерий "Димедрол.*" как в справке не ищет
End With
oFilterDesc.UseRegularExpressions=true   'Эта строка включает рег. выражения
oFilterDesc.setFilterFields(oFields())
oSheet.filter(oFilterDesc)
End Sub

apt31

Все верно. Работает. rami, благодарю. Но где можно найти документацию более менее доступную по этому встроенному языку. С таким трудом ищешь ответы все не систематизированно,  разбросано..

rami

Посмотрите здесь: http://admin-smolensk.ru/free_soft/  —это официальный портал органов власти СМОЛЕНСКОЙ ОБЛАСТИ.
Лично я скачал отсюда все руководства и часто пользуюсь ими.
Систематизировано здесь: http://www.openoffice.org/api/docs/common/ref/index-files/index-1.html и здесь https://wiki.openoffice.org/wiki/RU

apt31

Не могу найти информацию на вопрос "Как получить ссылку на открытые документы Calс "по имени и потом переключится в него

oDoc1 = thisComponent
oDoc2 = starDeskTop.currentComponent 'Эта строка не работает
oSheet1 = thisComponent.getSheets.getByName("алфсрок")
oSheet2 = oDoc2.getSheets.getByName("Лист1)

В VBA все просто Workbooks(Name).Activate а здесь написано много а нужного нет.

rami

Получить список открытых документов:
Sub DisplayFrameTitles
  Dim vFrames As Variant  'Все фреймы
  Dim vFrame As Variant   'одиночный фрейм
  Dim i As Integer        'индекс для перебора фреймов
  Dim s As String         'содержит строку для вывода
vFrames = StarDesktop.getFrames() 'Получим все фреймы
REM getCount() возвращает число содержащихся фреймов
REM Если есть четыре фрейма, то я имею значения 1, 2, 3 и 4
REM Метод getByIndex(i), однако, начинает отсчет с нуля. Это означает, REM что он требует значения 0, 1, 2 и 3
For i = 1 To vFrames.getCount()
  vFrame = vFrames.getByIndex(i-1)
  s = s & CStr(i-1) & " . " & vFrame.Title & CHR$(10)
  Next
  MsgBox s, 0, "Заголовки фреймов"
End Sub

apt31

#10
Спасибо rami. Поучительный макрос. Но мне видимо надо было изложить задачу полностью.
Я получаю файл с таблицей данных в формате CSV. Мне надо перенести эти данные на лист другой книги OOo с макросами фильтрации итд, заменив старые данные. Самое простое открыть обе книги и скопировать новые на старые.
Используя Ваш макрос вроде чтобы получить доступ к нужной книге надо поступить так
vFrame = StarDesktop.getFrames(i) или StarDesktop.getvFrame.Title но что с ним делать дальше?

Hasim


rami

Цитата: apt31 от 23 июня 2014, 10:34Я получаю файл с таблицей данных в формате CSV. Мне надо перенести эти данные на лист другой книги OOo с макросами фильтрации И так далее, заменив старые данные.
Тогда проще открыть рабочий документ (тот куда нужно вставить данные) и в него же макросом вставить лист из файла .CSV, а потом редактировать как нужно. Это довольно легко сделать, но т.к. у меня MAC OS, то нужно уточнить кое-что.
Можете ли вы сделать чтобы файл .CSV был в одной папке с рабочим документом? если нет, то дайте URL файла .CSV. Есть ли другие файлы в этой папке(нежелательно)? Изменяется ли имя файла .CSV? по сравнению с предыдущими?
Посмотрел что предложил hasim, вместо текста кракозябры.

Hasim

Цитата: rami от 23 июня 2014, 12:14Посмотрел что предложил hasim, вместо текста кракозябры.
Это, наверное, от обгрызенного червяками яблока.

rami

Тот же файл другим способом открывается правильно. От яблока откусывают только избраные, ни червей, ни вирусов в нём нет.