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

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

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

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

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


MacBook Pro, LibreOffice и Apache OpenOffice


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

А избыточная информация вредна, и пример здесь не нужен. Но вот умение абстрагироваться от ненужных деталей – весьма кстати.
eeigor, вы хорошо знаете какая информация полезна, а какая вредна и умеете абстрагировать других от не нужных деталей, но вопросы по LibreOffice почему-то задаёте вы, а не mikekaganski.
Записан

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

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


« Ответ #16: 10 Апрель 2020, 18:21 »

Хорошо. Я учту. Не будем ссориться.

Вопросы у меня будут, надеюсь на участие.
Записан
eeigor
Ubuntu 18.04 LTS
Форумчанин
***
Offline Offline

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


« Ответ #17: 11 Апрель 2020, 10:45 »

Моя проблема в том, что я никак не могу найти там ни одной запятой, хотя в ответе #3 говорится, что они там водятся. Помогите
mikekaganski, у Вас в примере (который приложен к сообщению #9) диапазон сплошной. Вот он (A1:B5): $Sheet1.$A$1:$B$5
Поэтому и разделителей Вы не увидели.

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

Есть такое свойство:
oChart.EmbeddedObject.UsedRangeRepresentations

которое в прилагаемом примере возвращает массив адресов поддиапазонов диаграммы по каждой из осей координат X и Y.

И для визуального контроля работы программы, ибо исчезновение точки на диаграмме не всегда заметно (точки, которую пользователь самолично исключил, грубо разорвав диапазон на поддиапазоны), все поддиапазоны выводятся на лист (увидите). А с целью повышения читабельности текста из строки с поддиапазонами удаляются ссылки на имя листа, знаки $ (абсолютной адресации) и после РАЗДЕЛИТЕЛЯ СПИСКА вставляется ПРОБЕЛ.
Право, первое лучше второго: A1:B5 vs $Sheet1.$A$1:$B$5  'зд. Ваш пример без разделителей

У студента физтеха - Macbook, LO Calc не русифицированный (если смена языка на что-то влияет), в качестве разделителя - ЗАПЯТАЯ, а у меня на Linux Ubuntu, LO Calc русифицированный - ТОЧКА С ЗАПЯТОЙ.
За кадром остались: две сигмы, метод наименьших квадратов и прочая "физика с математикой"... которые мне в данном случае были, ну, совершенно неинтересны. Моя задача заключалась "в обеспечении возможности исключать явно отклонившиеся точки из области полученных данных". Отсюда разрывы, отсюда и разделители... которые имеют "системное" происхождение и с моими ручками никак не связаны.

Вопрос не имеет особого практического значения, поскольку решён путём использовании константы, в которой хранится разделитель, и у каждого теперь он свой (кроссплатформенный  Злой). Вопрос чисто теоретический...
Надеюсь, что я расставил все точки над i, и теперь повторю ещё раз сам вопрос: как получить значение системного разделителя списка применительно к данному примеру (свойству) в условиях разных платформ.

P.S. Я перешёл на Linux с Windows (где использовал бы Win API, но в условиях разных платформ этот способ не работает) и не знаю, можно ли это сделать средствами самого LO Calc или нужно использовать функции операционной системы (и как это сделать в Linux я тоже не знаю).

P.P.S. Кстати, в прилагаемом примере почему-то при загрузке включается режим разработки (и кнопка не работает), а в других случаях сохраняется ранее выбранный режим. Что я делаю не так? Как зафиксировать режим выполнения (а не разработки) при старте программы?
См. Сервис - Формы - Режим разработки

* Пример.ods (26.38 Кб - загружено 5 раз.)
« Последнее редактирование: 11 Апрель 2020, 11:31 от eeigor » Записан
mikekaganski
Гуру
*******
Offline Offline

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


« Ответ #18: 11 Апрель 2020, 12:47 »

Хм. Иногда я готов согласиться с товарищем Lupp с ask.libreoffice.org насчёт ужасов локализации.

Здесь используется разделитель списка параметров функции (см. lcl_convertTokensToString). И если он задан явно, то получить его можно из registrymodifications.xcu с помощью вызова

Код:
GetRegistryKeyContent("org.openoffice.Office.Calc/Formula/Syntax/").getByName("SeparatorArg")

(это требует загрузки библиотеки Tools).
Проблема в том, что по умолчанию там пусто, и тогда начинаются волшебные вещи.

Во-первых, базовой настройкой по умолчанию является точка с запятой. Далее, если язык локали (не UI!) русский, так и остаётся. В противном случае считываются разделители из встроенных данных текущей локали (название локали можно было бы узнать с помощью GetStarOfficeLocale из библиотеки Tools). Проверяется десятичный разделитель (и альтернативный десятичный разделитель), и если первый - точка, либо первый - не запятая, а второй - точка, то разделитель списка параметров становится запятой. Если же первый - запятая, а второй - точка, то используется снова точка с запятой.

Затем если локаль - de_CH, снова восстанавливается точка с запятой. И в конце концов, если так случилось, что разделитель списка совпал с десятичным разделителем, и это не точка с запятой, то опять же восстанавливается точка с запятой.

Лично я из всего этого вынес одно: нужно писать свою функцию, в которой создавать виртуальную формульную ячейку, в неё записывать примитивную формулу в стандартном синтаксе (например, "=SUM(1;1)"), а затем считывать локализованную формулу для выдирания оттуда получившегося разделителя, и это уже использовать в макросе.

И кто придумал использовать локализованные вещи в API? Хотел бы я ему в глаза поглядеть.

Или есть уже что-то готовое для этого? @rami?
Записан

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

Сообщений: 2 975



« Ответ #19: 11 Апрель 2020, 13:02 »

И кто придумал использовать локализованные вещи в API? Хотел бы я ему в глаза поглядеть.
немец, который начинал писать офис в лохматых 90х годах прошлого века?
Записан

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут
mikekaganski
Гуру
*******
Offline Offline

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


« Ответ #20: 11 Апрель 2020, 13:05 »

И кто придумал использовать локализованные вещи в API? Хотел бы я ему в глаза поглядеть.
немец, который начинал писать офис в лохматых 90х годах прошлого века?

Нет. Не в 90х Показывает язык В 80х.
Записан

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

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


« Ответ #21: 11 Апрель 2020, 13:33 »

Рад общению. Буду посмотреть. Я с библиотеками не сталкивался

Спасибо
Записан
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #22: 11 Апрель 2020, 14:22 »

Или есть уже что-то готовое для этого? @rami?

Есть готовое Смеющийся, вот:
Код:
GetRegistryKeyContent("org.openoffice.Office.Calc/Formula/Syntax/").getByName("SeparatorArg")

Осталось передать полученный параметр в переменную DELIMITER (в макросе UpdateChartRange), а константу DELIMITER убрать. (всего лишь добавить две строчки кода)
Записан

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

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


« Ответ #23: 11 Апрель 2020, 14:24 »

Или есть уже что-то готовое для этого? @rami?

Есть готовое Смеющийся, вот:
Код:
GetRegistryKeyContent("org.openoffice.Office.Calc/Formula/Syntax/").getByName("SeparatorArg")

Осталось передать полученный параметр в переменную DELIMITER (в макросе UpdateChartRange), а константу DELIMITER убрать. (всего лишь добавить две строчки кода)

Хехе... по умолчанию там пусто. По крайней мере в некоторых конфигурациях.
Записан

С уважением,
Михаил Каганский
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #24: 11 Апрель 2020, 14:40 »

Рассуждая логически, там пусто быть не может, иначе откуда берутся разделители? Я не смог обнаружить "пустоту". А в каких случаях пусто?
Записан

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

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


« Ответ #25: 11 Апрель 2020, 14:47 »

Например, после сброса профиля.
Записан

С уважением,
Михаил Каганский
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #26: 11 Апрель 2020, 15:05 »

Сбросил, запустил:
Код:
Sub Main
GlobalScope.BasicLibraries.LoadLibrary("Tools")
msgbox GetRegistryKeyContent("org.openoffice.Office.Calc/Formula/Syntax/").getByName("SeparatorArg")
End Sub
Всё равно показывает разделитель "точка с запятой" (LibreOffice 6.4.1.2).

А если после сброса открыть "Параметры", окошки настроек разделителей будут пустые? У меня есть разделители (;, ;, |)
Записан

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

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


« Ответ #27: 11 Апрель 2020, 15:08 »

Нет, окошки будут заполнены. А настройка будет пустой - по крайней мере у меня в русской Win 10 и версии 6.4.3.1
Записан

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

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


« Ответ #28: 11 Апрель 2020, 15:26 »

GetRegistryKeyContent("org.openoffice.Office.Calc/Formula/Syntax/").getByName("SeparatorArg")
У меня этот метод вернул мою точку с запятой. На другой машине проверю позже (отправил).
Я что могу менять этот параметр (скриншот ниже)?

Не сразу нашел окошко с разделителями в параметрах.


* Снимок экрана от 2020-04-11 15-21-49.png (287 Кб, 1920x1080 - просмотрено 8 раз.)
« Последнее редактирование: 11 Апрель 2020, 15:28 от eeigor » Записан
mikekaganski
Гуру
*******
Offline Offline

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


« Ответ #29: 11 Апрель 2020, 15:32 »

Да, можете.
Записан

С уважением,
Михаил Каганский
Страниц: « 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!