После обработки документа во Writer из макроса нельзя закрыть приложение

Автор karzan, 13 октября 2021, 13:32

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

karzan

Добрый день, Уважаемые!

Столкнулись с проблемой в работе LO после работы макросов.
В среде VBS макрос на StarBasic открывает во Writer шаблон (*.dot например) вносит изменения в поля, сохраняет и закрывает документ, либо оставляет на просмотр.
При первом открытии документа в LO приложение не возможно закрыть, ни через закрытие окна, ни через меню. Не реагирует на закрытие приложения никак.
Только Диспетчер задач может убить приложение. После чего открытие проблемы не вызывает...

Подскажите куда ковырять?  ???
Пробовал варианты после закрытия файла через oDoc.Close(true) еще и закрытия oDesktop.terminate/dispose. Не помогает.
Коллега пробовал убивать фоновые процессы либры через WScript.Shell. Не то. "Висит" именно само приложение с открытым файлом.

Win 10 (x64)
LO 7.1.3.2(x64)

Отдельно отмечу, что на версии 6.4.4.2 (х86) такой проблемы не наблюдается...
Вариант Менять версию Либры не рассматривается...

kompilainenn

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

karzan

VBS - windows интерпретатор Visual Basic Script.

Программа не замысловатая, повторяющиеся замены букмарков убрал.

Dim ServMan, Dsctp, WriteDoc, arg(1), TFields, XFields, BFields, MField, TField, i, k, XField, oDisp, Ar(0), Args(0), mPrinter(0)

         ServMan = CreateObject("com.sun.star.ServiceManager")
         Dsctp = ServMan.createInstance("com.sun.star.frame.Desktop")
         oDisp = ServMan.createInstance("com.sun.star.frame.DispatchHelper")

         On Error Resume Next
         Err.Clear

         arg(0) = ServMan.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
         arg(0).Name = "AsTemplate"
         arg(0).Value = True
         arg(1) = ServMan.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
         arg(1).Name = "Hidden"
         arg(1).Value = True   'False   '

         WriteDoc = Dsctp.loadComponentFromURL("file:///c:/1/mail_1.dotx", "_blank", 0, arg)

         If Err <> 0 Then
          Dim Msg
          Msg = "Ïðîâåðüòå ïðàâèëüíîñòü óêàçàíèÿ ïóòè è èìåíè ôàéëà c:/1/mail_1.dotx"
          MsgBox Msg, , "Íå óäàåòñÿ îòêðûòü ôàéë"
         End If

         Set BFields = WriteDoc.getBookmarks()
         If BFields.hasByName("P_FIL_NAME1") Then
            BFields.getByName("P_FIL_NAME1").getAnchor.String = "Ìîñêîâñêèé áàíê"
         End If

         Table = WriteDoc.TextTables.getByIndex(0)
         Call Table.Rows.insertByIndex(6, 1)

         Call WriteDoc.TextTables.getByIndex(0).getCellByPosition(0, 6).setString("Èíôîðìàöèþ î íàëè÷èè ñ÷åòîâ íà 11.10.2021")

                        XFields = WriteDoc.TextFields.createEnumeration
                        Do While XFields.hasMoreElements
                            XField = XFields.nextElement
                            If XField.supportsService("com.sun.star.text.TextField.PageCount") Then
                                XField.Update
                            End If
                        Loop

Call WriteDoc.storeAsURL("file:///C:/TEMP/SP_452537_123456789047_20211013_01.doc", Ar)
Call WriteDoc.Close(True)

Start = Time
Do
Loop While (Time - Start) * 86400000 < 300


' Call Dsctp.Terminate

kompilainenn

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

bigor

Это  vbs макрос. Не понятны извращения, в LO с форматом МСО

Попробуйте для отладки hidden в false установить, возможно у вас скрытый документ висит
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

karzan

Внутри zip dotx-шаблон. Второй результат.
Проблема не только в одном файле, это общая проблема для выгрузки через Либру в формат MS Word и первое открытие в Либре.
Проявляется в LO 7.1.3.2(x64)

Вариант с видимым заполнением файла приводит к той же проблеме.

karzan

Цитата: Bigor от 13 октября 2021, 14:23Не понятны извращения, в LO с форматом МСО
Если б это не работало в  6.4.4.2 (х86), можно было бы думать про извращения. Но там работает нормально, и связано это очевидно с версией LO.
В поиске возможных вариантов решения ...


bigor

Да просто непонятно, если работаете с либрой, зачем используете форматы МСО
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

karzan

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

kompilainenn

Цитата: Bigor от 13 октября 2021, 14:59Да просто непонятно, если работаете с либрой, зачем используете форматы МСО
Это везде так. Давайте по существу.
Человек столкнулся с проблемой, похоже на регрессию. Вот сейчас и поковыряем
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

kompilainenn

@karzan: а теперь по шагам распишите, что и как вы делаете с этими файлами и что не так в итоге. Я спокойно открыл и закрыл оба файла в LibreOffice, никаких проблем
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

mikekaganski

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

mikekaganski

Обратите внимание, что on error resume next совместно с циклами типа while очень небезопасно. Например, у меня намертво виснет в цикле Do While XFields.hasMoreElements, когда документ не найден. Потому что условие генерирует ошибку - продолжается следующая строка (внутри цикла) - в конце концов доходит до Loop - и всё сначала.

Сейчас попробую с документом.
С уважением,
Михаил Каганский

mikekaganski

А когда документ на месте, всё работает как надо. И ЛО закрывается. Конечно, при раскомментированной строке, указанной в ответе 11.
С уважением,
Михаил Каганский

mikekaganski

Вот тестовый скрипт - слегка деформированный при тестировании - если кому-то хочется потестировать
С уважением,
Михаил Каганский