Hirdetés

Új hozzászólás Aktív témák

  • Bazs87

    tag

    Sziasztok!

    LibreOffice Calc-ot szeretnék vbs-ből manipulálni. Minden fut gond és működik, egyetlen problémám a sheet kiválasztása. Próbáltam több különböző parancsot (index szerint, megnevezés szerint), de sajnos egyik sem működik. Először meg kell nyitnom a fájlt, aminek az activesheet-jét átveszi, emiatt viszont a második megnyitott fájl már írásvédett lesz és az általam generált bagatell módosításokat nem tudom átvenni. (le tudnám menteni más néven, vagyis meg tudnám kerülni ezt a probémát, de nem ez a cél, szeretnék egy elegáns megoldást találni erre)

    Mivel a mahinálni kívánt fájl egy nagyon buta, de rendesen levédett fájl, ezért gondoltam arra is, hogy ott lehet a kutya elásva. A megoldásom viszont a teljesen sima új tesztcélra generált fájlt sem tudta az elvárásoknak megfelelően kezelni.
    Remélem valaki találkozott már ezzel a problémával.
    Köszönöm előre is!

    class timecnt
    dim st, et, ps, nwt, uswt, swt
    end class

    dim list(9)

    ' arrayclass deklaralas
    for i=0 to 9
    set list(i) = new timecnt
    next

    ' adatok kiolvasasa

    '----------------------------------------------------------------------------------------
    'http://www.oooforum.de/viewtopic.php?t=44190

    Set objServiceManager = WScript.CreateObject("com.sun.star.ServiceManager")
    Set StarDesktop = objServiceManager.createInstance("com.sun.star.frame.Desktop")

    cURL = "file:///D:\BR\netzlaufwerk\NFO\vbs\libre_officemuster\test\test.ods"

    set oDoc = StarDesktop.loadComponentFromURL( cURL, "_blank", 0, Array() )
    set oSheet = oDoc.CurrentController.ActiveSheet

    'egyeb nem mukodo megoldasok
    'set oSheet = oDoc.getSheets().getByName( "Tabelle1" )
    'set oSheets = oDoc.getSheets()
    'set oSheet = oSheets.getByIndex(0)
    '----------------------------------------------------------------------------------------

    call librecalc_read

    wknd = false

    ' szamitasok elvegzese
    for i=0 to 9
    with list(i)
    sh = CutLeft ( .st, ":" )
    sm = CutRight( .st, ":" )
    eh = CutLeft ( .et, ":" )
    em = CutRight( .et, ":" )

    wtime = worktime_count(sh, sm, eh, em, .ps)
    if not wknd then
    if wtime<=8 then
    .nwt = wtime
    else
    .nwt = 8
    .uswt = wtime-8
    .swt = 0
    end if
    else
    .nwt = 0
    .uswt = 0
    .swt = wtime
    end if
    end with
    next

    ' adatok kiirasa
    call librecalc_write

    erase list

    '----------------------------------------------------------------------------------------
    set oSheet = nothing
    set oDoc = nothing
    Set StarDesktop = nothing
    Set objServiceManager = nothing
    '----------------------------------------------------------------------------------------

    MsgBox "process is done"



    function worktime_count(starth, startm, endh, endm, pause)
    'msgbox starth + " " + startm + "" + endh + " " + endm + " " + pause
    worktime_count = cInt(endh) + cInt(endm) / 60 - cInt(starth) - cInt(startm)/60
    if pause <> "" then worktime_count = worktime_count - cInt(pause) / 60
    end function

    function CutLeft(txt, sym)
    if txt<>"" then
    s_e = inStr( txt, sym )-1
    CutLeft = left ( txt, s_e)
    end if
    end function

    function CutRight(txt, sym)
    if txt<>"" then
    s_a = inStr(txt, sym)
    CutRight = right(txt, len(txt) - s_a)
    end if
    end function

    sub librecalc_read()
    for i = 0 to 9
    list(i).st = oSheet.getCellByPosition( 1, 15 + i ).String 'B16
    list(i).et = oSheet.getCellByPosition( 2, 15 + i ).String 'C16
    list(i).ps = oSheet.getCellByPosition( 6, 15 + i ).String 'G16
    next
    end sub

    sub librecalc_write()
    for i=0 to 9
    with list(i)
    if .nwt<>0 then
    oSheet.getCellByPosition( 3, 15 + i ).Value = .nwt 'D16
    end if
    if .uswt<>0 then
    oSheet.getCellByPosition( 4, 15 + i ).Value = .uswt 'E16
    end if
    if .swt<>0 then
    oSheet.getCellByPosition( 5, 15 + i ).Value = .swt 'F16
    end if
    end with
    next
    end sub

Új hozzászólás Aktív témák