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

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

23 Октябрь 2020, 02:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Пол: Мужской
Расположение: Новомиргород
Сообщений: 5


« Стартовое сообщение: 14 Январь 2016, 22:13 »

Приветствую!
Мне нужно макрос что бы удалял строки из таблицы по условию не равно значению
столбца 01.01.2001, т.е. строки у которых в столбце с датой отличающейся от 01.01.2001(последний столбец)
были удалены. Использовал код:
Код:
Sub NDRowsDelete
 odoc=thiscomponent
 oSheet = oDoc.CurrentController.getActiveSheet()
 myrows=oSheet.getrows
 
 rowmax=60
 rowmin=10
 
 For i=rowmax To rowmin step -1
 textnd = osheet.getcellbyposition(1,i).string
    If textnd <> "01.01.2001" Then
      myrows.removebyindex(i,1)
    End if   
 Next i
 
End Sub
Что то не работает. Подскажите пожалуйста что нужно изменить?
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #1: 14 Январь 2016, 22:27 »

Добро пожаловать на форум!
Что то не работает. Подскажите пожалуйста что нужно изменить?
Что именно не работает? У меня на тестовых данных этот код честно убрал строки вида "01.01.01" и оставил строки "01.01.2001". Возможно, дело именно в формате ячеек?

PS Я сейчас одну глупую вещь спрошу - только ты не обижайся: ты ведь в курсе, что твой макрос проверяет значения в колонке B, да?
« Последнее редактирование: 14 Январь 2016, 22:42 от JohnSUN » Записан

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

Пол: Мужской
Расположение: Новомиргород
Сообщений: 5


« Ответ #2: 15 Январь 2016, 18:31 »

Конечно же не обижаюсь, в макросах полный профан Улыбка
мне нужно например , для колонки Е, это так:
Код:
myrows.removebyindex(i,4)?
Записан
akkinak
Участник
**
Offline Offline

Пол: Мужской
Расположение: Новомиргород
Сообщений: 5


« Ответ #3: 15 Январь 2016, 18:56 »

т.е. для кононки Е код должен быть так?
Код:
Sub NDRowsDelete
 odoc=thiscomponent
 oSheet = oDoc.CurrentController.getActiveSheet()
 myrows=oSheet.getrows
 
 rowmax=60
 rowmin=10
 
 For i=rowmax To rowmin step -1
 textnd = osheet.getcellbyposition(4,i).string
    If textnd <> "01.01.2001" Then
      myrows.removebyindex(i,4)
    End if   
 Next i
 
End Sub
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #4: 15 Январь 2016, 19:20 »

Ну да... A=0, B=1, C=2 и т.д. Всё верно. Ну, и формат даты тоже проверь - она в ячейке должна выглядеть именно так, как записана в константе в макросе

А вот в removebyindex единичку на четвёрку зря... не надо этого было делать... Там "один" обозначает количество удаляемых строк...

Ещё раз, чуть подробнее:
getcellbyposition(4,i) считывает с листа ячейку из i-той строки и 4-ой колонки (нумерация с нуля, значит из E)
removebyindex(i - удаляет с этой i-той строки столько строк, сколько указано во втором параметре
« Последнее редактирование: 15 Январь 2016, 19:26 от JohnSUN » Записан

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

Пол: Мужской
Расположение: Новомиргород
Сообщений: 5


« Ответ #5: 16 Январь 2016, 20:02 »

уф... привел макрос к виду
Код:
Sub NDRowsDelete
 odoc=thiscomponent
 oSheet = oDoc.CurrentController.getActiveSheet()
 myrows=oSheet.getrows
 
 rowmax=9999
 rowmin=0
 
 For i=rowmax To rowmin step -1
 textnd = osheet.getcellbyposition(4,i).string
    If textnd <> "'01.01.2001" Then
      myrows.removebyindex(i,1)
    End if   
 Next i
 
End Sub
он то работает, то не работает, не пойму почему.
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 022


iMac, LibreOffice и Apache OpenOffice


« Ответ #6: 16 Январь 2016, 20:43 »

он то работает, то не работает, не пойму почему.
Выложите образец документа.
Записан

akkinak
Участник
**
Offline Offline

Пол: Мужской
Расположение: Новомиргород
Сообщений: 5


« Ответ #7: 16 Январь 2016, 21:09 »

образец

* Без имени 23.ods (131.05 Кб - загружено 11 раз.)
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 022


iMac, LibreOffice и Apache OpenOffice


« Ответ #8: 16 Январь 2016, 22:39 »

он то работает, то не работает, не пойму почему.
Макрос работает на 74% впустую. Почему? Он перебирает в цикле 9999 строк из которых 2592 имеют данные, а остальные пустые. А ещё макрос удаляет заголовок таблицы Непонимающий
В строке кода If textnd <> "'01.01.2001" Then нужно убрать апостроф.

А вообще такие задачи решаются фильтром.
Записан

Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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