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

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

16 Май 2021, 18:13 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Активная ячейка  (Прочитано 4034 раз)
0 Пользователей и 1 Гость смотрят эту тему.
BazZile
Участник
**
Offline Offline

Пол: Мужской
Расположение: Россия
Сообщений: 20


« Стартовое сообщение: 14 Май 2015, 09:49 »

Как получить активную ячейку на Java UNO?
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #1: 14 Май 2015, 09:57 »

У контроллера документа есть свойство ViewData и метод для его получения getViewData. В этом свойстве хранится информация о текущем отображении документа. Хранится в виде обычной текстовой строки с разделителями.
Формат этой строки довольно сложен и плохо документирован. Но тем не менее воспользоваться сведениями из него можно.
Для электронной книги эта строка выглядит приблизительно так:
100/60/0;4;tw:612;3/16/0/0/0/0/2/0/0/0/0;3/7/0/0/0/0/2/0/0/0/0;3/19/0/0/0/0/2/0/0/0/0;...;0/0/0/0/0/0/2/0/0/0/0
Если распарсить её (разделить на отдельные строки) по точке с запятой, то получим
100/60/0
4
tw:612
3/16/0/0/0/0/2/0/0/0/0
3/7/0/0/0/0/2/0/0/0/0
3/19/0/0/0/0/2/0/0/0/0
2/1/0/0/0/0/2/0/0/0/0
3/8/0/0/0/0/2/0/0/0/0
3/9/0/0/0/0/2/0/0/0/0
3/8/0/0/0/0/2/0/0/0/0
0/0/0/0/0/0/2/0/0/0/0
Во второй строке расположен индекс текущего, активного листа. А начиная с четвертой строки перечисляются параметры каждого из листов книги. Первые два числа в этих строках как раз и обозначают индексы колонки и строки активной ячейки.
Небольшая трудность заключается в том, что в некоторых случаях разделителем в этих строках будет не косая черта, а знак плюса. Но это можно учесть в коде
Записан

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

Пол: Мужской
Расположение: Россия
Сообщений: 20


« Ответ #2: 14 Май 2015, 10:10 »

То есть определенных методов на языке Java, в отличие от Basic, нет?
Записан
BazZile
Участник
**
Offline Offline

Пол: Мужской
Расположение: Россия
Сообщений: 20


« Ответ #3: 14 Май 2015, 10:18 »

Ну вот, например, получил строку:
100/60/0;
0;
tw:270;
2/3/0/0/0/0/2/0/0/0/0;;
Получается для вставки (например текста) в активную ячейку, мне нужно использовать параметры в sheet.getCellByPosition(2,3)?
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #4: 14 Май 2015, 10:23 »

А в StarBasic "родного" объекта ActiveCell тоже нет. В VBA есть. И пытаясь выполнить код из экселевского макроса, в котором встречается упоминание ActiveCell, офис как раз и проделывает что-то в этом роде:
Код:
REM Функция для определения активной ячейки
REM Параметры:
REM iSheet - индекс листа, для которого ищется активная ячейка.
REM Не обязателен. По умолчанию - активный лист
REM oDoc - электронная книга, для которой ищется активная ячейка.
REM Не обязателен. По умолчанию - текущий документ
REM Возвращает ссылку на активную ячейку или Null, если её не удалось определить
REM Автор: Владислав Орлов aka JohnSUN, Украина, Киев, 2012
REM by UROS > http://www.oooforum.org/forum/viewtopic.phtml?t=19348
REM by Villeroy > http://user.services.openoffice.org/en/forum/viewtopic.php?f=20&t=38672#p177590
Function ActiveCell(Optional iSheet As Long, Optional oDoc As Variant) As Object
Dim arrayOfString() ' Массив текстовых строк для парсинга
Dim lRow&, lColumn& ' Координаты искомой ячейки
Dim tmpString$ ' Временная строка
Dim oCurrentController ' Контроллер анализируемого документа
Dim oSheets As Variant ' Все листы текущей книги
Dim oSheet As Variant ' Активный (анализируемый) лист книги
REM Проверить входные параметры и установить значения по умолчанию:
If IsMissing(oDoc) Then oDoc = ThisComponent
If NOT oDoc.SupportsService("com.sun.star.sheet.SpreadsheetDocument") Then Exit Function
oCurrentController = oDoc.getCurrentController()
If IsMissing(iSheet) Then
oSheet = oCurrentController.getActiveSheet()
iSheet = oSheet.getRangeAddress().Sheet
Else
If (iSheet < 0) Then Exit Function
oSheets = ThisComponent.getSheets()
If (iSheet >= oSheets.getCount()) Then Exit Function
oSheet = oSheets.getByIndex(iSheet)
EndIf
tmpString = oCurrentController.getViewData()
arrayOfString() = Split(tmpString, ";")
If UBound(arrayOfString) < (3 + iSheet) Then Exit Function
tmpString = arrayOfString(3 + iSheet)
If InStr(tmpString,"+") > 0 Then
arrayOfString() = Split(tmpString, "+")
Else
arrayOfString() = Split(tmpString, "/")
EndIf
lColumn = CLng(arrayOfString(0))
lRow = CLng(arrayOfString(1))
Set ActiveCell = oSheet.getCellByPosition(lColumn, lRow)
End Function
Ну вот, например, получил строку:
100/60/0;
0;
tw:270;
2/3/0/0/0/0/2/0/0/0/0;;
Получается для вставки (например текста) в активную ячейку, мне нужно использовать параметры в sheet.getCellByPosition(2,3)?
Бинго! Угадал! В конце приведенной функции именно так и написано
Записан

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

Пол: Мужской
Расположение: Россия
Сообщений: 20


« Ответ #5: 14 Май 2015, 10:26 »

JohnSUN, спасибо!
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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