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

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

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

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

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


« Стартовое сообщение: 21 Март 2020, 13:51 »

Есть у диапазона свойства:

Formula  'формулы по-английски, разделитель списка параметров - запятая  (или нет?)
FormulaLocal  'формулы по-русски, разделитель списка параметров - точка с запятой

ArrayFormula  'формулы по-английски, разделитель списка параметров - точка с запятой

У меня на разных машинах - разные версии: на линуксе - локализованная, на маке - оргигинальная.
Работаю на линуксе. Вот не пробовал, но думаю, что мой файл не пойдёт на маке в оригинальной версии из-за разделителя.

Вероятно, из соображений аналогии, должно существовать свойство, указанное в теме сообщения.
А из соображений синтаксиса точку с запятой следует заменить на запятую. Не думаю, что формулы массива в коде сильно распространены у русскоязычных пользователей. Поправят.

И вы меня поправьте, если я не прав.
Во всяком случае в Excel - это не так, как здесь...
« Последнее редактирование: 21 Март 2020, 13:59 от eeigor » Записан
mikekaganski
Гуру
*******
Offline Offline

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


« Ответ #1: 21 Март 2020, 15:56 »

Formula  'формулы по-английски, разделитель списка параметров - запятая  (или нет?)
Или нет. Это "каноническое" представление формулы, независимое от локали. Разделитель - точка с запятой. И нужно пользоваться именно этим свойством (и ArrayFormula), если только не взаимодействуете с пользовательским вводом.
Записан

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

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


« Ответ #2: 21 Март 2020, 16:30 »

Спасибо. Просто в Excel разделитель – запятая, а текст формулы уже на листе в локализованной версии транслируется в вариант по-русски и с точкой с запятой.
« Последнее редактирование: 21 Март 2020, 16:33 от eeigor » Записан
eeigor
Ubuntu 18.04 LTS
Форумчанин
***
Offline Offline

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


« Ответ #3: 9 Апрель 2020, 23:53 »

Разделитель - точка с запятой.
Столкнулся с разделителями...
oChart.EmbeddedObject.UsedRangeRepresentations

Хоть и свойство другое, но суть вопроса та же.
У меня в локализованной версии свойство UsedRangeRepresentations использует в качестве разделителя точку с запятой ";", но в оригинальной версии на Mac'е это же свойство использует запятую ",".
Ну, вот неправильно это!.. Везде должна быть запятая.

По крайней мере, подскажите, как узнать тип разделителя и подставить нужный самостоятельно?
« Последнее редактирование: 9 Апрель 2020, 23:56 от eeigor » Записан
mikekaganski
Гуру
*******
Offline Offline

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


« Ответ #4: 10 Апрель 2020, 00:10 »

но в оригинальной версии на Mac'е
Что такое "оригинальная версия"? (кмк, Вы полагаете, что если она переведённая - то она "неоригинальная?")

И отсюда
Везде должна быть запятая
Да нет, вероятнее всего, везде должна быть именно точка с запятой. Но это лирика, а фактически Вы не предоставили ни файла-примера, ни хотя бы строк, которые Вы видите. Я, например, в примитивной диаграмме вижу только четыре строки безо всяких запятых:

Код:
"$Sheet1.$A$5"
"$Sheet1.$A$6:$A$9"
"$Sheet1.$B$5"
"$Sheet1.$B$6:$B$9"

так что я даже не представляю, о каких там говорится разделителях.
Записан

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

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


« Ответ #5: 10 Апрель 2020, 00:26 »

Так ведь "UsedRangeRepresentations"!
У меня вот так:
oChart.Ranges = oXYAddresses()

Просто диапазонов может быть несколько. Но речь только о разных разделителях в разных версиях Calc'а. Они действительно разные.
Так как его, разделитель, считать из системных настроек?

Для примера (UsedRangeRepresentation):
"$'Анализ данных'.$C$2;$'Анализ данных'.$C$4:$C$5;$'Анализ данных'.$C$27"
« Последнее редактирование: 10 Апрель 2020, 00:38 от eeigor » Записан
mikekaganski
Гуру
*******
Offline Offline

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


« Ответ #6: 10 Апрель 2020, 00:38 »

Так ведь "UsedRangeRepresentations"!
У меня вот так:
oChart.Ranges = oXYAddresses()

Просто диапазонов может быть несколько. Но речь только о разных разделителях в разных версиях Calc'а. Они действительно разные.
Так как его, разделитель, считать из системных настроек?

Это было что? ответ на что? и что это вот должно было кому сообщить? Это пример документа с диаграммой? или пример строк, которые возвращает метод? да и вообще какой теперь метод обсуждается? UsedRangeRepresentations или Ranges? и при чём тут нечто с названием "oXYAddresses"?

Для примера (UsedRangeRepresentation):

Ох. Или теперь уже без завершающей s?
Записан

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

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


« Ответ #7: 10 Апрель 2020, 00:42 »

В Ranges присваивается массив диапазонов точек (x, y), а UsedRangeRepresentations(0) возвращает диапазоны только координат X, и UsedRangeRepresentations(1) - для Y.
Записан
eeigor
Ubuntu 18.04 LTS
Форумчанин
***
Offline Offline

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


« Ответ #8: 10 Апрель 2020, 00:44 »

"$'Анализ данных'.$C$2;$'Анализ данных'.$C$4:$C$5;$'Анализ данных'.$C$27"
На Mac'е в английской версии вместо точки с запятой будет запятая. Вот только в этом вопрос.
Записан
mikekaganski
Гуру
*******
Offline Offline

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


« Ответ #9: 10 Апрель 2020, 00:47 »

Вот как выглядел бы мой вопрос:

"В приложенном примере есть простая диаграмма и макрос, который выводит сообщения со строками из свойства UsedRangeRepresentations этой диаграммы. Моя проблема в том, что я никак не могу найти там ни одной запятой, хотя в ответе #3 говорится, что они там водятся. Помогите, как мне изменить диаграмму или код, чтобы получить там запятые или точки с запятой!"

* testChart.ods (14.34 Кб - загружено 5 раз.)
Записан

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

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


« Ответ #10: 10 Апрель 2020, 08:46 »

Просто я пишу с телефона.
Макрос действительно выводит сообщения со строками из свойства UsedRangeRepresentations диаграммы.
Всё работает. Диапазонов много (из-за разрывов – исключенных точек). Однако для наглядности и визуального контроля дополнительно выводится строка с включёнными диапазонами из вышеуказанного свойства. Для сокращения текста и повышения читабельности из этой строки удаляются ссылки на имя листа, знаки $ (абсолютной адресации) и после РАЗДЕЛИТЕЛЯ СПИСКА вставляется ПРОБЕЛ. Но когда я передаю приложение другому пользователю, возникает проблема с разделителем. Поэтому надо изменить значение константы DELIMITER (= ","). Вот я и спросил: как избавиться от этого шага, и решить проблему с разными разделителями.
Записан
eeigor
Ubuntu 18.04 LTS
Форумчанин
***
Offline Offline

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


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

Как мне получить значение системного разделителя?
Записан
mikekaganski
Гуру
*******
Offline Offline

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


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

Послушайте, eeigor, это уже слишком.

Попробую перевести то, что я понял из Вашего "объяснения", на русский:

Задам-ка я вопрос про разделители, и начну его с того, что упомяну свойство, в котором этих разделителей вообще нет. Пусть все погадают, зачем я это свойство сюда засунул, вот смеху-то! Итак, вот оно:
oChart.EmbeddedObject.UsedRangeRepresentations

А теперь я ещё больше всех запутаю: напишу, как будто эти самые разделители в этом свойстве таки есть:
У меня в локализованной версии свойство UsedRangeRepresentations использует в качестве разделителя точку с запятой ";", но в оригинальной версии на Mac'е это же свойство использует запятую ",".
Ну, вот неправильно это!.. Везде должна быть запятая.

И теперь задам собственно вопрос.
По крайней мере, подскажите, как узнать тип разделителя и подставить нужный самостоятельно?

Так, меня попросили представить пример файла или данных. Почему не поиграть в загадки дальше! Пусть попытаются отгадать, зачем я выделяю красным окончание множественного числа в этом свойстве!
Так ведь "UsedRangeRepresentations"!
Ну, продолжим-с. Добавим в микс нечто неожиданное: упоминание свойства "Range" (неизвестного интерфейса: в отличие от UsedRangeRepresentations, они даже не смогут понять, о чём идёт речь, потому что свойство это есть у множества объектов в модели ООо/ЛО, да и тип его различный... и присвоим ему значение неопределённой функцией. Пусть оно выглядит абсолютно чужеродно и не связано с предыдущим текстом - так загадочнее!)
У меня вот так:
oChart.Ranges = oXYAddresses()

Но шутки шутками, а мне, похоже, до сих пор не ответили на мой такой загадочный вопрос. Что они, совсем непонятливые, что ли? Ну и что, что я не задал его внятно. Я считаю, что они должны уже были всё понять и ответить (независимо от того, что разделителей на самом деле несколько: разделитель аргументов функций в Calc, разделители столбцов и строк в инлайновых массивах Calc... я могу не знать всего этого, но я всё равно не считаю, что я должен прикладывать какие-то усилия, чтобы формулировать задачу внятно).
Просто диапазонов может быть несколько. Но речь только о разных разделителях в разных версиях Calc'а. Они действительно разные.
Так как его, разделитель, считать из системных настроек?

А, да! Всё же давай-ка я отредактирую и приведу вариант строки. Правда, они всё равно не догадаются, откуда эта строка взялась. Заодно приведу название свойства немного "подредактированным", чтоб увлекательность сохранить:
Для примера (UsedRangeRepresentation):
"$'Анализ данных'.$C$2;$'Анализ данных'.$C$4:$C$5;$'Анализ данных'.$C$27"

Так, он всё равно не понимает. Да и как он может понять, дитё неразумное. Напишу-ка я "объяснение", которое никак не прояснит, при чём тут разделители, о которых собственно вопрос, и как связаны между собой эти свойства: ведь из того, что я напишу ниже, связь никак не следует. Зачем указывать, например, какой вообще объект имеется ввиду (каким кодом он получен) - так можно будет догадаться, что ожидает программа в этом свойстве, и было бы слишком просто!
В Ranges присваивается массив диапазонов точек (x, y), а UsedRangeRepresentations(0) возвращает диапазоны только координат X, и UsedRangeRepresentations(1) - для Y.

Повторюсь для тупых. Он, наверное, всё ещё не понял, что там запятая меняется на точку с запятой в зависимости от ... чего-то (я же не говорю даже, как эта точка с запятой там появилась, и куда она потом идёт. Я думаю, что мой вопрос простой, несмотря на игру в шарады; моё незнание того, что и разделителей несколько, и зависеть они могут от разного, не извиняет глупости отвечающего, который до сих пор не воспользовался ясновидением, чтобы понять наконец что мне нужно!)
"$'Анализ данных'.$C$2;$'Анализ данных'.$C$4:$C$5;$'Анализ данных'.$C$27"
На Mac'е в английской версии вместо точки с запятой будет запятая. Вот только в этом вопрос.

А теперь я приведу этот вот убийственный аргумент, который звучал как-то уже несколько месяцев назад. Дело в том, что у меня есть какие-то невнятные проблемы - я пишу на какой-то ультрабезопасной системе, не подключённой к интернету, а задаю вопросы с телефона. И это извиняет весь тот бред, который я пишу, и моё неумение задавать вопросы, и нежелание приготовить тестовые примеры, скажем, дома или у друга (где есть интернет), и вообще пусть мои проблемы станут вашими проблемами!
Просто я пишу с телефона.
Макрос действительно выводит сообщения со строками из свойства UsedRangeRepresentations диаграммы.
И вот он, час X! Открою, наконец, что "разделители" были не связаны изначально с UsedRangeRepresentations, и я, кажется, добавляю их сам ... для чего? Напишу, что "для наглядности и визуального контроля". Опять напишу "с включёнными диапазонами из вышеуказанного свойства" (нет, я не умею писать "с включёнными диапазонами из свойства X": ведь "вышеуказанное" звучит круто и загадочно, а указать конкретно, пусть и с повторами, было бы слишком точно, что для программиста - страшный грех!).
Всё работает. Диапазонов много (из-за разрывов – исключенных точек). Однако для наглядности и визуального контроля дополнительно выводится строка с включёнными диапазонами из вышеуказанного свойства. Для сокращения текста и повышения читабельности из этой строки удаляются ссылки на имя листа, знаки $ (абсолютной адресации) и после РАЗДЕЛИТЕЛЯ СПИСКА вставляется ПРОБЕЛ.
Ну а теперь, когда я создал впечатление, что строка эта с разделителями нужна число визуально, как упомянуто, "для наглядности и визуального контроля", снова поставлю всех в тупик: оказывается, не всё так просто (ну, казалось бы, какая разница в визуальном контроле: запятая или точка с запятой? ан нет, "возникает проблема". Какая проблема, спросите вы? нееее, я не такой простачок, чтобы внятно писать "создаю строку конкатенацией строк из массива UsedRangeRepresentations объекта Z разделителем Y; записываю полученную строку в свойство K объекта M; на системе с локалью A и языком B это работает, а если локаль C и язык интерфейса D - выдаёт ошибку "..."." Просто напишу "проблема с разделителем". И код макроса целиком - это слишком жирно (я с телефона, не помните, что ли???))
Но когда я передаю приложение другому пользователю, возникает проблема с разделителем. Поэтому надо изменить значение константы DELIMITER (= ","). Вот я и спросил: как избавиться от этого шага, и решить проблему с разными разделителями.

Короче, я признаюсь: я слишком глуп, чтобы играть в весёлую игру, предложенную уважаемым eeigor. Но если бы моя восьмилетняя дочь выражала свои мысли подобным образом, я серьёзно задумался бы о необходимости нанять репетитора.
Записан

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

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


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

Смело… но не умно. Зато умнó. А избыточная информация вредна, и пример здесь не нужен. Но вот умение абстрагироваться от ненужных деталей – весьма кстати.

LO Calc позволяет считать значение свойства ниже:
oChart.EmbeddedObject.UsedRangeRepresentations

Там ничего интересного нет: просто перечислены адреса диапазонов… через разделитель списка.
У меня в русифицированной версии – это точка с запятой, а у соседа в англоязычной (я её называю «оригинальной») – ЗАПЯТАЯ.

Как узнать, что будет использовать LO Calc в качестве разделителя списка? Вот и весь вопрос. Требования примера выглядят маниакальными. Как и желание узнать/угадать, зачем мне это нужно.
В общем, поговорили...
« Последнее редактирование: 10 Апрель 2020, 18:11 от eeigor » Записан
mikekaganski
Гуру
*******
Offline Offline

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


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

Хорошо. Объясняю для тех, кто знает, что другим нужно для ответа.

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

Зато если бы я его смог увидеть, я мог бы поэкспериментировать, вплоть до отладки исходного кода, чтобы разобраться, откуда там что.

Но есть люди, которые знают точно, что именно нужно другим, чтобы ответить. Я очень рад за этих людей и за их умение абстрагироваться от лишних деталей.
Записан

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