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

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

14 Июль 2020, 12:54 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Сообщений: 34


« Стартовое сообщение: 3 Июнь 2020, 10:50 »

Сегодня при переписывании кода появилась новая проблема.
В исходном коде VBA было так:
***************
' на листе Info этой книги должны быть указаны листы, которые нужно корректировать
For Each x In ThisWorkbook.sheets("Info").Range("A6:Z6")
  If period = x.Value Then i = x.Column: Exit For
  If x.Value = "" Then Exit For
Next
***************
Оказалось, что в LO getCellRangeByName("A6:Z6") это массив данных. Голову сломала, как мне обратиться к ячейкам, чтобы найти нужный период. Или нужно вернуться к https://opengrok.libreoffice.org/xref/core/sc/inc/cellsuno.hxx?r=32ff26f7#767 и дочитать до конца?
Записан
mikekaganski
Гуру
*******
Online Online

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 922


« Ответ #1: 3 Июнь 2020, 11:10 »

Оказалось, что в LO getCellRangeByName("A6:Z6") это массив данных.

Это не совсем корректно. На самом деле результат - это объект ScCellRangeObj, который опять может давать доступ к своим поддиапазонам или к массивам данных, формул и т.п.

Код:
 r = ThisComponent.Sheets(0).getCellRangeByName("A6:Z6")
  For col = 0 To r.Columns.Count - 1
    cell = r.getCellByPosition(col,0)
    If cell.Value = period Then i = cell.CellAddress.Column : Exit For
    If cell.String = "" Then Exit For
  Next col
« Последнее редактирование: 3 Июнь 2020, 11:32 от mikekaganski » Записан

С уважением,
Михаил Каганский
Fiona
Участник
**
Offline Offline

Сообщений: 34


« Ответ #2: 3 Июнь 2020, 11:56 »

Супер! Как, оказывается, все просто и изящно... Спасибо, Михаил! Улыбка
У меня сложилось впечатление, что за неимением времени я начала не с того конца освоение LO... Да уж...
Записан
sokol92
Форумчанин
***
Offline Offline

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


WWW
« Ответ #3: 3 Июнь 2020, 11:58 »

Дополнение к ответу Михаила #1.
Для пробежки по непустым ячейкам диапазона(ов) можно использовать другой подход. Выделите несколько (небольших) диапазонов на листе и выполните макрос:

Код:
Sub TestGetCells
  Dim oRange, oEnum, oCell, s
  oRange=ThisComponent.CurrentSelection
  oEnum=oRange.getCells.createEnumeration()
  While  oEnum.hasMoreElements
    oCell=oEnum.nextElement
    s=s & oCell.AbsoluteName & chr(10)
  Wend
  Msgbox s,,"Выделены непустые ячейки"  
End Sub

Не думаю, что изучение алгебры LO нужно начинать с теории Галуа исходных текстов программ.

У меня уже стаж самообучения целых 2 месяца (!), я начал с чтения книги А.Питоньяка OOME_4_0.odt, изучения документации по сервисам и интерфейсам. Полезным оказалось сделать сопоставительную таблицу между свойствами/методами объектов Excel (с которыми у меня давнее знакомство) и аналогами в LO.
« Последнее редактирование: 3 Июнь 2020, 12:19 от sokol92 » Записан

Владимир.
Fiona
Участник
**
Offline Offline

Сообщений: 34


« Ответ #4: 4 Июнь 2020, 11:32 »

Спасибо, в этом вся и проблема... Я до мая и VBA не интересовалась - вот и  приходится все налету хватать.
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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