Запустить макрос из Python в Libre calc

Автор georgiy123, 9 января 2020, 10:03

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

bigor

А теперь с новыми поправками от Rafic пробовали?
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

georgiy123

Нашел ребята , позже отпишусь )

georgiy123

Ребята , и еще один вопрос
Немогу найти , как создать файл с именем ? , ну какбы открыть файл новый файл  , уже с таким именем? и после макроса сохранить его ?

bigor

Если использовать вариант предложенный economist то в нем уже открывается созданный файл с определенным именем. Если вы хотите открывать файл из макроса, то как-то так
OpenF = StarDesktop.loadComponentFromUrl(ConverttoURL(sPath)&"имя файла.ott","_blank",0,dimArray())
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

georgiy123

Ребята , я понимаю , я уже достал со своими тупыми вопросами
я вроде-бы разобрался

я открываю LO через консоль
я открываю макрос через консоль
и теперь последний вопрос , как сохранить этот файл где сработал макрос , через консоль ?

bigor

Цитата: georgiy123 от 13 января 2020, 12:48и теперь последний вопрос , как сохранить этот файл где сработал макрос , через консоль ?
В макросе прописываете в конце сохранение файла и закрытие его если надо
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

georgiy123

Цитата: Bigor от 13 января 2020, 12:55
Цитата: georgiy123 от 13 января 2020, 12:48и теперь последний вопрос , как сохранить этот файл где сработал макрос , через консоль ?
В макросе прописываете в конце сохранение файла и закрытие его если надо

а вы можете дописать это  ? , я в басике вообще не разбираюсь ((


private sub main
    dim p$, f$, t$, rw&, cl&, a(), i&
    dim wb as object, ws as object, c as object
   
    p="C:\Users\g.nerovniy\Desktop\log\"
    f=dir(p+"*.txt")
    if len(f) then wb=thiscomponent else exit sub
   
    do           
       wb.sheets.insertnewbyname(f,i)
       ws=wb.sheets(i):i=i+1:rw=0
       open p+f for input as #1
            do while not eof(#1)
               line input #1, t
               a=split(t)
               for cl=0 to ubound(a)
                   c=ws.getcellbyposition(cl,rw)
                   select case cl
                       case 0 to 2, 5 to 7
                          c.setvalue(a(cl))
                       case else
                          c.setstring(a(cl))
                   end select
               next
               rw=rw+1
            loop
       close #1
       setFormat ws, rw
       f=dir
    loop while len(f)
    oDoc = ThisComponent

oDoc.Sheets.removeByName("Sheet1")
end sub

sub setFormat(ws as object, rw&)
    dim r as object, cf as object

    r=ws.getcellrangebyname("f1:f"+rw)
    cf=r.conditionalformat   
   
    condFormat "0.95", "" , "Good", 3, cf
    condFormat "0.9", "0.95", "Neutral", 7, cf
    condFormat "0.85", "0.8999", "Bad", 7, cf
    condFormat "0", "0.85", "Error", 7, cf
   
    r.conditionalformat=cf
End Sub

sub condFormat(formula1$, formula2$, style$, o&, cf as object)
    dim p(3) As new com.sun.star.beans.PropertyValue
    p(0).name="StyleName"
    p(0).value=style
    p(1).name="Operator"
    p(1).value=o
    p(2).name="Formula1"
    p(2).value=formula1
    if len(formula2) then
       p(3).name="Formula2"
       p(3).value=formula2
    end if       
    cf.addnew(p)

end sub
Sub NDRowsDelete
odoc=thiscomponent
oSheet = oDoc.CurrentController.getActiveSheet()
myrows=oSheet.getrows

rowmax=3000
rowmin=0

For i=rowmax To rowmin step -1
textnd = osheet.getcellbyposition(5,i).string
    If textnd >="0,95" Then
      myrows.removebyindex(i,1)
    End if   
Next i

End Sub






путь на рабочий стол



bigor

Как то так:
После последнего dim
Dim args(0) As New com.sun.star.beans.PropertyValue

Перед End Sub
oDoc.storeToURL("file:///c:/путь к рабочему столу/имя файла.odt", args())
oDoc.close(true)
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

georgiy123

не получается , и еще пробовал в самое начало вставлять Dim args(0) As New com.sun.star.beans.PropertyValue

bigor

#24
1. У вас путь к файлу задан неправильно. Или сделайте как у меня в #22 только подставьте путь правильный и имя файла или как в #18 вместо sPath пропишите путь в windows формате.
2. Не нужен 0 в скобках args. Я исправил свой ответ, но вы скопировали его быстрее :)


ps и определитесь куда вставлять код. Вы по очереди вызываете main и NDRowsDelete? тогда код в последнюю вызываемую процедуру и dim в нее же
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

georgiy123

Ребята , всем спасибо , написал , разобрался )
думаю создать новую тему , и выложить туда код )