Как изменить стиль ссылок (синтаксис формулы) в макросе?

Автор eeigor, 10 июля 2021, 10:17

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

eeigor

Вопрос к гуру. Изменение стиля ссылок - здесь не более чем полезный пример. Проблема сидит глубже.

Excel VBA
Sub ToggleR1C1
   Application.ReferenceStyle = xlA1 + xlR1C1 - Application.ReferenceStyle
End Sub


Краткость - сестра таланта.

Мне нужен этот макрос в LibreOffice Calc. Для свойства Grammar и для десятка прочих других, которые не входят в "com.sun.star.sheet.GlobalSheetSettings".

Проблема в том, что соответствующий макрос не перезагружает файл конфигурации. ТРЕБУЕТСЯ РЕСТАРТ.
Да, мы об этом писали. Но что, совсем тупик?

Все работает через окно параметров (см. скриншот).

'   <item oor:path="/org.openoffice.Office.Calc/Formula/Syntax"><prop oor:name="Grammar" oor:op="fuse"><value>2</value></prop></item>
'   Calls GetRegistryKeyContent()
Sub DisplayFormulaSyntax()  'Grammar
  Dim sNodePath As String  'Syntax

  GlobalScope.BasicLibraries.LoadLibrary("Tools")
  sNodePath = "/org.openoffice.Office.Calc/Formula/Syntax"
  MsgBox "Property Value:  " _
   & GetRegistryKeyContent(sNodePath).getByName("Grammar") _
   , MB_ICONINFORMATION, "Formula Syntax • Grammar"
End Sub

Sub Test_SetFormulaSyntax()
  Call SetFormulaSyntax(2)  '0=Calc A1; 1=Excel A1; 2=Excel R1C1
End Sub

Sub SetFormulaSyntax(nValue As Integer)  'Grammar
  Dim oConfig As Object, oRegKey As Object
  Dim aProps(0) As New com.sun.star.beans.PropertyValue

'   GlobalScope.BasicLibraries.LoadLibrary("Tools")  'GetRegistryKeyContent()

  aProps(0).Name  = "nodepath"
  aProps(0).Value = "/org.openoffice.Office.Calc/Formula/Syntax"

'   Doesn't lead to the desired result.

'   ReDim Preserve aProps(1)
'   ' If False, the cache must operate in write-through mode,
'   ' where updates are written to persistent storage at once –
'   ' that is before com.sun.star.util.XChangesBatch.commitChanges() returns.
'   aProps(1).Name  = "enableasync"
'   aProps(1).Value = False


  oConfig = createUnoService("com.sun.star.configuration.ConfigurationProvider")
'   Xray oConfig
  oRegKey = oConfig.createInstanceWithArguments("com.sun.star.configuration.ConfigurationUpdateAccess", aProps())
'   Xray oRegKey
  oRegKey.setPropertyValue("Grammar", nValue)  'РАБОТАЕТ!
  oRegKey.commitChanges()  'НЕ РАБОТАЕТ!
'   oConfig.flush()  'НЕ РАБОТАЕТ!
End Sub


Древняя ошибка. И так со многими свойствами. Когда появится обходной путь?

UPD:
Запустите SetFormulaSyntax. Значение в окне параметров будет изменено, но лист останется в том же стиле. Однако если вы нажмете кнопку «Применить» или «ОК» в окне «Параметры», стиль на листе изменится.

Проблема с функцией GetRegistryKeyContent и с используемой службой ConfigurationProvider: она изменяет параметры в файле конфигурации, но не обновляет приложение. В приведенном выше примере изменяется даже значение в окне параметров, но не стиль ссылок листа. Появляется рассогласование между «недоустановленным» в макросе значением параметра и состоянием листа.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

sokol92

#1
По итогам обсуждения Михаил написал tdf#132145.

Эта же проблема обсуждалась еще в декабре 2006 года между А.Питоньяком и авторами (?) OO. Возможная причина:

ЦитироватьThat's because OOo internally uses a number of caches for often-used configuration settings (originally for performance reasons, not sure if this still holds).

Синхронизация кешей всегда была одной из главных проблем сложных систем.
Владимир.

eeigor

#2
Задача не выглядит невозможной. Решение существует! В окне параметры есть две кнопки: "Применить" (Apply) и/или "ОК" - и всё прекрасно обновляется. Можно ли посмотреть этот код?

Цитата по ссылке от @sokol92:
"Майк, в качестве первого шага: мне кажется, было бы логично, если бы метод commitChanges вызывал тот же механизм, который используется диалоговым окном «Параметры» при фиксации изменения параметра".

Было бы неплохо!

В общем, закинул на forum.openoffice.org/en
Там тоже в ступоре...

-- LO Calc - младший брат Excel, так? Иначе почему он пытается быть таким похожим на него (с точки зрения совместимости)?

-- Под капотом совершенно другое приложение. Они не братья. Это пришельцы из разных галактик... Размер Excel больше, чем размер всего пакета LO с базами данных и двумя макроязыками. ЭТО НЕ МИЛЛИАРДНЫЙ ПРОЕКТ!

Поэтому без претензий :(
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community