Как правильно отсечь диапазон?

Автор eeigor, 24 марта 2020, 16:37

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

eeigor

Помогите разобраться.
Получаю диапазон ячеек (несколько столбцов и строк), и мне надо оставить только один (например, второй) столбец в этом диапазоне.
Пишу:
oAddress = oRange.Columns(1).RangeAddress

Однако oAddress.EndRow получает значение последней строки листа, т. е. берётся весь столбец на листе, а не в диапазоне.
Неожиданно, ибо в Excel не так (а как ожидалось: в пределах исходного диапазона).
Далее я корректирую oAddress самостоятельно, подсчитав количество строк в исходном диапазоне. Это неудобно.

Или делаю пересечение двух диапазонов:
oIntersection = oRange.queryIntersection(oRange.Columns(1).RangeAddress)
Полученный объект содержит пересечение двух диапазонов:
oIntersection.RangeAddresses(0).EndRow покажет правильное значение.

Что я делаю не так?
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

mikekaganski

Действительно, XTableColumns::getByIndex() и XTableRows::getByIndex() возвращают не подобъект диапазона, а ссылку на столбцы/строки листа.

Если Вам нужен поддиапазон, получайте его с помощью функции getCellRangeByPosition(nLeft, nTop, nRight, nBottom); например, в рассматриваемом случае

oAddress = oRange.getCellRangeByPosition(1, 0, 1, oRange.Rows.Count-1).RangeAddress
С уважением,
Михаил Каганский

eeigor

Естественно, когда я, как оказалось, зарядил больше миллиона ячеек, LO Calc задумался...
Кроме того, Excel, получив такой "завышенный" диапазон, не спрашивая отсёк бы его по границе UsedRange (зд. UsedArea) и быстро бы откликнулся.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

eeigor

Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community