Помогите разобраться.
Получаю диапазон ячеек (несколько столбцов и строк), и мне надо оставить только один (например, второй) столбец в этом диапазоне.
Пишу:
oAddress = oRange.Columns(1).RangeAddress
Однако oAddress.EndRow получает значение последней строки листа, т. е. берётся весь столбец на листе, а не в диапазоне.
Неожиданно, ибо в Excel не так (а как ожидалось: в пределах исходного диапазона).
Далее я корректирую oAddress самостоятельно, подсчитав количество строк в исходном диапазоне. Это неудобно.
Или делаю пересечение двух диапазонов:
oIntersection = oRange.queryIntersection(oRange.Columns(1).RangeAddress)
Полученный объект содержит пересечение двух диапазонов:
oIntersection.RangeAddresses(0).EndRow покажет правильное значение.
Что я делаю не так?
Действительно, XTableColumns::getByIndex() и XTableRows::getByIndex() возвращают не подобъект диапазона, а ссылку на столбцы/строки листа.
Если Вам нужен поддиапазон, получайте его с помощью функции getCellRangeByPosition(nLeft, nTop, nRight, nBottom); например, в рассматриваемом случае
oAddress = oRange.getCellRangeByPosition(1, 0, 1, oRange.Rows.Count-1).RangeAddress
Естественно, когда я, как оказалось, зарядил больше миллиона ячеек, LO Calc задумался...
Кроме того, Excel, получив такой "завышенный" диапазон, не спрашивая отсёк бы его по границе UsedRange (зд. UsedArea) и быстро бы откликнулся.
Спасибо