Не всегда верно работает макрос

Автор Massaraksh7, 4 декабря 2024, 22:15

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

Massaraksh7

Ситуация следующая. Есть 2 odt-файла (см. приложение), в одном 3 картинки, в другом - 48.
Есть простой макрос в каждом из файлов (абсолютно одинаковый).
Sub DoHelp
Dim aProp(1) as new com.sun.star.beans.PropertyValue
Dim oNewSize As New com.sun.star.awt.Size
'---Извлечь картинки
Shapes = ThisComponent.getDrawPage()
oGraphicProvider=createUnoService("com.sun.star.graphic.GraphicProvider")
for i = 0 to Shapes.count - 1
    oShape = Shapes(i)
    if not oShape.supportsService("com.sun.star.text.TextGraphicObject") then goto Handler
   
'    oSize = oShape.Graphic.getSize()  '----В pixelах!!! Width,Height в 0,01 mm html - <img src="aaa" width="200" height="100">
'    sw = ""
'    if oSize.Width>800 then sw = " width=""800"""
     
    aProp(0).Name  = "URL"
    s = "C:\Htm\Pict" & i & ".png"
    aProp(0).Value=ConvertToUrl(s)
    aprop(1).Name="MimeType"
    aprop(1).Value="image/png"
'    print(s)
    oGraphicProvider.storeGraphic oShape.graphic, aProp
     
'    anch = oshape.anchor
'On Error GoTo Handler   
'    cursor = anch.getText().createTextCursorByRange(anch.getStart())
'    cursor.goLeft(1,False)
'    ur = ConvertToURL("C:\Htm\Pict" & i & ".png")
'    cursor.string="<img src=""" & ur & """ " & sw & ">"
Handler:   
next i
ThisComponent.CurrentController.Frame.close(true)
end sub
Он извлекает картинки из файла и записывает их в c:\htm\
При запуске макроса из самого файла оба нормально отрабатывают, картинки появляются.
Но при внешнем запуске макрос в первом файле отрабатывает, а во втором - нет.
Внешний звпуск для 1 файла:
soffice "C:\htm\Style.odt" "macro://./Standard.Module1.DoHelp"
Внешний звпуск для 2 файла:
soffice "C:\htm\Oper.odt" "macro://./Standard.Module1.DoHelp"
Видео.
https://cloud.mail.ru/public/dxCT/QFr3FSJUa
P.S.: Второй файл слишком большой, прикрепляю по ссылке:
https://cloud.mail.ru/public/L1m1/SwXobQWe4

sokol92

Вероятно, макрос начинает выполнение до того, как документ полностью загружен. В Excel такое тоже встречается.
Поставьте в начале макроса:
Wait 1000У меня помогает.
Владимир.

Massaraksh7

Цитата: sokol92 от  5 декабря 2024, 16:06Вероятно, макрос начинает выполнение до того, как документ полностью загружен.
Да, действительно, спасибо!