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

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

5 Август 2020, 19:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: « 1 2 3 4   Вниз
  Печать  
Автор Тема: Calc: ArrayFormulaLocal ?  (Прочитано 9333 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
rami
Гуру
*******
Offline Offline

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


iMac, LibreOffice и Apache OpenOffice


« Ответ #45: 14 Апрель 2020, 12:59 »

Или есть уже что-то готовое для этого?
В контексте обсуждения "как узнать используемые разделители" я готовых решений не знаю (кроме упомянутой библиотеки  Tools)

Если бы автор вопроса сформулировал его так, как мы постоянно просим: "есть массив диапазонов, нужно получить их адреса в виде простой строки вида "A1:A5; A9:A15; A20:A25", мне бы никогда не пришла мысль искать разделители в настройках, для решения такой задачи есть "уже (давно) что-то готовое" — сервис "com.sun.star.table.CellRangeAddressConversion", в этом случае не нужно знать ничего о разделителях. Но eeigor выбрал не самое оптимальное решение и завёл нас в интересные дебри разделителей.


В примере двойной щелчок по "чекбоксу" (ячейки в столбце A) устанавливает или снимает "птичку", а также обновляет диаграмму и подпись диапазонов под ней. (Кнопку под диаграммой убрал)

* CellRangeAddressConversion.ods (23.5 Кб - загружено 9 раз.)
Записан

eeigor
Ubuntu 18.04 LTS
Форумчанин
***
Offline Offline

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


« Ответ #46: 18 Апрель 2020, 15:35 »

и завёл нас в интересные дебри разделителей
Сам того не ведая... (ибо новичок в LO), но сижу довольный... интересными дискуссиями.
rami, про метод CellRangeAddressConversion слышал, и ваш пример разберу обязательно.

Зд. много и других занимательных веток.
« Последнее редактирование: 18 Апрель 2020, 15:43 от eeigor » Записан
sokol92
Форумчанин
***
Offline Offline

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


WWW
« Ответ #47: 19 Апрель 2020, 19:31 »

Добрый день! Не знаю, представляет ли интерес следующий макрос, который выводит все имена функций, разделители, использующиеся в формулах в стандартном и локализованом виде. Еще может быть, на мой взгляд, полезна функция getMappings сервиса "com.sun.star.sheet.FormulaOpCodeMapper".

Код:
Sub ShowFormulaOpCodes
  Dim oFormula, DataArray, v1, v2, i as Long, arr2
  oFormula=CreateUnoService("com.sun.star.sheet.FormulaOpCodeMapper")
  
  v1=oFormula.getAvailableMappings(6, &H07fffffff)   ' FormulaLanguage: 6=API
  v2=oFormula.getAvailableMappings(3, &H07fffffff)   ' FormulaLanguage: 3=NATIVE
  
  Redim DataArray(Ubound(v1)+1)
  DataArray(0)=Array("Name", "LocalName", "OpCode")              ' Headers
 
  For i=0 To Ubound(v1)
    redim arr2(2)
    arr2(0)=v1(i).Name
    arr2(1)=v2(i).Name
    arr2(2)=v1(i).Token.OpCode
    DataArray(i+1)=arr2    
  Next i
  
  ShowDataArray DataArray
End Sub

' Show DataArray in new Calc document
Sub ShowDataArray(DataArray)
  Dim oDoc, oSheet, oRange
  oDoc = StarDesktop.loadComponentFromURL( "private:factory/scalc", "_blank", 0, Array() )
  oSheet = oDoc.getSheets().getByIndex(0)
  oRange=oSheet.getCellRangeByPosition(0,0,Ubound(DataArray(0)),Ubound(DataArray),0)
  oRange.SetDataArray DataArray
End Sub
« Последнее редактирование: 19 Апрель 2020, 20:18 от sokol92 » Записан

Владимир.
rami
Гуру
*******
Offline Offline

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


iMac, LibreOffice и Apache OpenOffice


« Ответ #48: 19 Апрель 2020, 21:43 »

представляет ли интерес следующий макрос, который выводит все имена функций, разделители, использующиеся в формулах в стандартном и локализованом виде
В принципе, можно использовать этот сервис для получения разделителей, но для решения рассмотренной в теме задачи это слишком велосипедно, а для чего ещё трудно представить.

Еще может быть, на мой взгляд, полезна функция getMappings сервиса "com.sun.star.sheet.FormulaOpCodeMapper".
Можно узнать OpCode, что дальше?
Записан

mikekaganski
Гуру
*******
Offline Offline

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


« Ответ #49: 20 Апрель 2020, 12:10 »

Не знаю, представляет ли интерес следующий макрос, который выводит все имена функций, разделители, использующиеся в формулах в стандартном и локализованом виде. Еще может быть, на мой взгляд, полезна функция getMappings сервиса "com.sun.star.sheet.FormulaOpCodeMapper".

Это, конечно, интересный сервис, но к сожалению, для разделителей списка он не слишком полезен - именно из-за того, что в каноническом представлении "имя" этого разделителя совпадает с именем разделителя столбцов в массиве. Поэтому нельзя просто определить, какая из ";", возвращённая getAvailableMappings, относится к чему (если только не предполагать, что разделитель списка идёт раньше разделителя столбцов массива, что, кмк, является деталью реализации и не гарантировано). Тем более не получится использовать getMappings с ";" - потому что неясно, для какой из них оно вернёт результат.
Записан

С уважением,
Михаил Каганский
sokol92
Форумчанин
***
Offline Offline

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


WWW
« Ответ #50: 20 Апрель 2020, 14:09 »

Коллеги, спасибо за ответы!
У нас в практике MS Excel были задачи, для которых наличие подобного опубликованного сервиса позволило бы существенно упростить решение.
« Последнее редактирование: 20 Апрель 2020, 14:10 от sokol92 » Записан

Владимир.
sokol92
Форумчанин
***
Offline Offline

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


WWW
« Ответ #51: 11 Июль 2020, 18:54 »

Наткнулся на способ получения информации о локали без использования (нелюбимой мною) библиотеки Tools - сервис LocaleData. Для "быстрого старта":

Код:
Sub testLocale
  Dim oLocaleData, v1, v2,v3,v4,v5
  Dim aLocale as new com.sun.star.lang.Locale
  oLocaleData=createUnoService("com.sun.star.i18n.LocaleData")
  ' Запрашиваем информацию о локали по умолчанию. Если нужна иная локаль, то перед вызовом нужно заполнить структуру aLocale
  With oLocaleData
     v1=.getLocaleItem(aLocale)             ' разделители (числа, дата,  время, список, кавычки)
     v2=.getAllCalendars2(aLocale)          ' названия дней, месяцев (именительный и родительный падеж для ru), c какого дня начинается неделя, ...
     v3=.getAllCurrencies2(aLocale)         ' используемые валюты
     v4=.getAllFormats(aLocale)             ' числовые форматы (системные, для данной локали)
     v5=.getDateAcceptancePatterns(aLocale) ' шаблоны, используемые для интерпретации дат при вводе 
  End With
End Sub
Записан

Владимир.
Страниц: « 1 2 3 4   Вверх
  Печать  
 
Перейти в:  

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