Числовые форматы, установка макросом

Автор МР, 28 апреля 2019, 23:39

0 Пользователи и 1 гость просматривают эту тему.

МР

В VBA Excel устанавливаю NumberFormat "0,00" - число в ячейке отображается с 2-мя дес. знаками,"0,00000" - с 5-ю,"0,000" - с 3-мя,"0" - без дес. знаков. Как того же  достичь в ОО Basic для Calc? NumerFormat=2 приводит к отображению с 2-мя дес. знаками, 0 - без дес. знаков. Вместо 5 или 3-х дес. знаков отображается галиматья какая-то. На форуме, не нашел, а вроде не уникальная "потребность".

rami

Свойство ячейки NumberFormat принимает номер формата, а не строку. Если не знаете номер нужного формата, назначьте вручную формат ячейки и посмотрите какой у него номер. Если нужного формата нет, можно создать свой. Что вы хотите сделать? Покажите макрос.

МР

Макроса как такового нет. Есть внешняя по отношению к LO программа , есть написанная на языке этой программы подпрограмма, записывающая значение в ячейку открытой в Excel или Calc электронной таблицы. Выбор офиса происходит вне этой подпрограммы, но он ей известен. Всего-то захотел опционально вместе с числовым значением обрабатывать  в подпрограмме количество отображаемых дес. знаков. Для Excel заранее знал как, полагал что и для Calc  не сложнее. Разобрался уже, прописал в десяток ячеек  десяток форматов и прочитал их. Поскольку закономерности в нумерации не нашел, просто буду держать их в массиве. Вообще, предварительно попробовал, как в VBA, разузнать что-то с помощью макрорекордера. При установке  формата ячейки получил вот такой макрос:sub M1
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "NumberFormatValue"
args1(0).Value = 115

dispatcher.executeDispatch(document, ".uno:NumberFormatValue", "", 0, args1())


end sub


Догадываюсь теперь, что это установка NumberFormat =115 . Но каким-то уж очень окольным путем (

mikekaganski

Посмотрите здесь, как правильно определять код формата. (Где-то здесь на форуме эта тема тоже мелькала - не помню где.)
С уважением,
Михаил Каганский

МР

Начинаю понимать, что номера фоматов - не нечто стандартное, а могут меняться от документа к документу. Своеобразно...

rami

Цитата: МР от 30 апреля 2019, 14:56
Начинаю понимать, что номера фоматов - не нечто стандартное, а могут меняться от документа к документу. Своеобразно...
Есть "стандартный" набор форматов (с номерами от 0 до 100, но не все номера использованы) — насколько я знаю, их можно удалить, но при попытке "вернуть" будет создан новый пользовательский формат. Если не играться форматами, можно считать, что их номера не меняются. Если хотите быть уверенным, то можно сначала запросить (макросом) номер нужного формата, а затем его назначить ячейке.

МР

#6
Нашел подходящий макрос на сайте АОО, "подкрутил " и втащил в свой код. Запускаю при открытии книги, записываю в массив 11 кодов (2 стандартных+9 создаю), потом уже из массива достаю.  Почему-то возвращает коды не 1 и 2 и создает не 126 и далее, как при ручном задании формата в ячейках, а 10001,10002, 10126.  Но работает, менять не стал. Исходный макрос, пожалуй ,здесь продублирую, вдруг кто ещё искать станет. Если при этом что нарушаю, просьба к модератору стереть и сильно не банить

function fnGetNumberFormatId(oDoc, sNumberFormat)
sCharLocale = oDoc.getPropertyValue("CharLocale")
nFormatId = oDoc.getNumberFormats.queryKey(sNumberFormat, sCharLocale, false)
if nFormatId = -1 then 'Not yet defined
       nFormatId = oDoc.getNumberFormats.addNew(sNumberFormat, sCharLocale)
end if
fnGetNumberFormatId = nFormatId
end function


Всем откликнувшимся спасибо за помощь.

rami

Цитата: МР от 30 апреля 2019, 21:55Почему-то возвращает коды не 1 и 2 и создает не 126 и далее, как при ручном задании формата в ячейках, а 10001,10002, 10126.
Номера от 0 до 100 для стандартных форматов, другие для разных локалей, для российской локали 10000 и далее.
Цитата: МР от 30 апреля 2019, 21:55Если при этом что нарушаю, просьба к модератору стереть и сильно не банить
А что нарушаете? если не секрет.

МР

#8
Цитата: rami от 30 апреля 2019, 22:14А что нарушаете? если не секрет.

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

rami

По техническим причинам были удалены все вложения в старых темах до 2014г. Но если кто-то интересуется этими темами, мы можем либо попытаться восстановить удалённые документы либо решить вопрос заново.