Совместимость со старыми версиями

Автор Mike_B, 22 января 2019, 13:08

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

Mike_B

Добрый день, уважаемые форумчане!
Может ли кто-то подсказать, каковы отличия версии 3.6 от 5.4.4 и пойдет ли там код?
Поясню: нам нужно собирать отдельные листы экселя в единый файл под Slackware 13.37.0. Там стоит LO 3.6 и обновить на последнюю пока не могут, чтобы не "поехало" остальное ПО (там далеко не одна задача крутится). Сказали, что в принципе можно в контейнеры ставить, но там ядро не позволит. Когда переедем на новый сервер, неизвестно пока что.
Вот отсюда вопрос: создан (под Windows) файл-шаблон ots со ссылками на листы в текущем каталоге. Написан (уважаемым JohnSun, за что ему большое спасибо) макрос ниже. На 5.4.4 работает прекрасно. На юниксе системщики смогли запустить только от админского аккаунта, что нехорошо. От пользовательского не идет. Сможет ли связка ots + макрос в 3.6 работать или что надо поменять? У меня в памяти libreoffice висит (видно по ps), но более ничего не делается...


Sub CCBook(Optional x1 As Variant, Optional x2 As Variant)
Dim Tmplt As String, ResFile As String
Dim oDoc As Variant, oSheets As Variant, i As Long
Dim Args(0) As New com.sun.star.beans.PropertyValue
Args(0).Name = "FilterName"
Args(0).value = "MS Excel 97"
GlobalScope.BasicLibraries.LoadLibrary("Tools")

If IsMissing(x1) Then
Tmplt = ThisComponent.getSheets().getByIndex(0).getCellRangeByName("B1").getString()
ResFile = ThisComponent.getSheets().getByIndex(0).getCellRangeByName("B2").getString()
Else
Tmplt = x1
If IsMissing(x2) Then
ResFile = ThisComponent.getSheets().getByIndex(0).getCellRangeByName("B2").getString()
Else
ResFile = x2
EndIf
EndIf
If FileExists(ConvertToURL(Tmplt)) Then
oDoc = OpenDocument(ConvertToURL(Tmplt), Array())
oSheets = oDoc.getSheets()
For i = 0 To oSheets.getCount() - 1
oSheets.getByIndex(i).setLinkMode(com.sun.star.sheet.SheetLinkMode.NONE)
Next i
oDoc.StoreAsURL(ConvertToURL(ResFile), Args())
oDoc.close(True)
EndIf
ThisComponent.close(True)
End Sub

JohnSUN

Цитата: Mike_B от 22 января 2019, 13:08
У меня в памяти libreoffice висит (видно по ps), но более ничего не делается...
Вполне возможно - просто как гипотеза - что офис ожидает ответ на невидимый вопрос "Книга содержит ... Обновить их?"
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Mike_B

Цитата: JohnSUN от 22 января 2019, 16:39Вполне возможно - просто как гипотеза - что офис ожидает ответ на невидимый вопрос "Книга содержит ... Обновить их?"
Запросто может быть, но как проверить, непонятно. На сервер лишь консольный доступ имею, по Putty или WinSCP. И ведь строка запуска включала --headless --norestore --invisible, винда при этом вопросов не задавала и обновляла связи. А т.к. Либре кроссплатформенный, ожидается схожее поведение...

JohnSUN

Ну, не знаю... Если бы я столкнулся с такой проблемой, то сначала попробовал бы какой-то не очень сложный тест, который наверняка должен что-то сделать...
Например, добавить в следующую ячейку дату-время очередного запуска, создать какой-то файл пустышку...
Если и совсем уж простой макрос будет завешивать офис, то искать альтернативные варианты (или пытаться расшифровать логи офиса)
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Mike_B

Цитата: JohnSUN от 22 января 2019, 18:17Ну, не знаю... Если бы я столкнулся с такой проблемой, то сначала попробовал бы какой-то не очень сложный тест, который наверняка должен что-то сделать...
Ерунда какая-то! Файл D:\Work\Test\TestLiOrunMacro.ods - тыкаешь в него, Alt-F11, TestLiOrunMacro - Test - Test - выполнить. Отрабатывает отлично.

Из командной строки (строка из батника):

"C:\Program Files\LibreOffice 5\program\soffice.exe" --headless --norestore --invisible "D:\Work\Test\TestLiOrunMacro.ods" "macro://TestLiOrunMacro/Standard.Test.Test"


- открывается Либре, стоит. По экрану можно ходить стрелочками, но на Alt-F11 не реагирует. Если убить батник - завершается. Чего ж он стоит? На винде.

В %temp% создает подкаталог типа lu5088jbwew.tmp, в нем lu5088jbwey.tmp, который по сути ods с тем самым макросом.

rami

Цитата: Mike_B от 22 января 2019, 18:41Чего ж он стоит?
А если в момент "стояния" нажать ESC или ENTER (т.е. ответить на не видимый вопрос)?

mikekaganski

С уважением,
Михаил Каганский

Mike_B

Цитата: rami от 22 января 2019, 18:50А если в момент "стояния" нажать ESC или ENTER (т.е. ответить на не видимый вопрос)?
Уж чего не нажимал, без толку.

Цитата: mikekaganski от 22 января 2019, 19:09--headless несовместим с macro://
Как же у меня на винде с этими ключами работало? Впрочем, проверил и без них - тоже работает. На винде. И как стояло на линуксе, так и стоит.

Положительный результат - на винде либра 3.6.7.2 справилась прекрасно. Передал начальству, пусть они ищут способ запустить под линуксом.

bigor

soffice --norestore --invisible ~\wsv\TestLiOrunMacro.ods "macro://TestLiOrunMacro/Standard.Test.Test" работает в Ubuntu
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

mikekaganski

Цитата: Mike_B от 23 января 2019, 12:04
Цитата: mikekaganski от 22 января 2019, 19:09--headless несовместим с macro://
Как же у меня на винде с этими ключами работало?
По-видимому, так:
Цитата: Mike_B от 22 января 2019, 18:41
Из командной строки (строка из батника):

"C:\Program Files\LibreOffice 5\program\soffice.exe" --headless --norestore --invisible "D:\Work\Test\TestLiOrunMacro.ods" "macro://TestLiOrunMacro/Standard.Test.Test"


- открывается Либре, стоит. По экрану можно ходить стрелочками, но на Alt-F11 не реагирует. Если убить батник - завершается. Чего ж он стоит? На винде.
С уважением,
Михаил Каганский