Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: FilePicker

neosofta [28.02.2025 07:55:56]

#

Avaa (tiedosto) palikka Windowsille säädettynä LibreOffice Basic makroille

Sub OpenFilePicker()

    Dim sUrl$
    sUrl = thisComponent.URL
    sIniDir$ = Replace(Replace(Left(sUrl, InStrReverse(sURL, "/")) & "*.xml.", "/", "\"), "file:\\\","")

    sFilter$ = "Extensible Markup Language files (*.xml)|*.xml|Portable Document files(*.pdf)|*.pdf|"
    rep = GetFileDlgEx(sIniDir, sFilter)
    If rep <> "" Then
        MsgBox "Full path: " & rep & chr(13) & chr(10) &  chr(13) & chr(10) & "Full path (when using LibreOffice [StarBasic] Basic macros): " & ConvertToURL(rep)
    End If

End Sub

Function GetFileDlgEx(sIniDir As String, sFilter As String)

  Dim objShell As Object, filePicker As Object, sTitle$
  sTitle = "Avaa"
  Set objShell = CreateObject("WScript.Shell")

  If instr(sIniDir, ":") <= 0 then
    sIniDir = objShell.CurrentDirectory & "\" & sIniDir
  End If

  sIniDir = Replace(sIniDir,"\","\\")

  Set filePicker = objShell.Exec("mshta.exe ""about:<object id=d classid=clsid:3050f4e1-98b5-11cf-bb82-00aa00bdce0b></object><script>moveTo(0,-9999);eval(new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(0).Read("& Len(sIniDir)+Len(sFilter)+Len(sTitle)+41 &"));function window.onload(){var p=/[^\0]*/;new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(p.exec(d.object.openfiledlg(iniDir,null,filter,title)));close();}</script><hta:application showintaskbar=no />""")

  filePicker.StdIn.Write "var iniDir='" & sIniDir & "'; var filter='" & sFilter & "';var title='" & sTitle & "';"
  GetFileDlgEx = filePicker.StdOut.ReadAll

End Function

Function InStrReverse(sText As String, search As String) As Long

    If sText = "" Or search  = "" Then
        If sText = "" And search  <> "" Then
            MsgBox "No string from which to search" : Goto jump
        ElseIF  sText <> "" And search  = "" Then
            MsgBox "No serach string" : Goto jump
        ElseIF sText = "" And search  = "" Then
            MsgBox "Nothing to do" : Goto jump
        ElseIf Len(search) > Len(sText) Then
            MsgBox "Unable to execute, the length of the search string exceeds" & _
            chr(10) & "the length of the string being searched from" :  Goto jump
        End If
    End If

    Dim i As Long

    For i = Len(sText) To 1 Step -1
        If Mid(sText, i, Len(search)) = search Then
            InStrReverse = i : Exit Function
        End If
    Next i

jump:
    InStrReverse = 0

End Function

groovyb [11.03.2025 22:52:34]

#

Tuli vaan tästä mieleen, että eikös libreofficella ole oma api filepickerille?

neosofta [12.03.2025 09:03:15]

#

LOfficella ei ole mitään, kaikki on OOfficen peruja.

groovyb [12.03.2025 12:22:24]

#

neosofta kirjoitti:

LOfficella ei ole mitään, kaikki on OOfficen peruja.

Joo, huomasinkin että sama kirjasto on myös siellä käytössä. Oliko jokin erityinen syy miksi päädyit käyttämään ns. vanillaratkaisun sijaan omaa erillistä ratkaisua? Ihan sillä tasolla vaan aattelin että onko ne OOfficen tuotokset vaan kuraröpelöä joita kannattaa välttää, vai oliko sulla jokin erillinen spesifi syy?

neosofta [12.03.2025 14:39:26]

#

No meikäläinen on eläkepäivillään päässyt vanhan rakkauden makuun, kun ei kunto anna hurvitella entiseen malliin. Koneella ei ole enää mitään mikä ei tule Windows 11 asennuksen mukana paitsi AccessDataBaseEngine 2016 & LibreOffice (x64) 24.8.4.2 Ainoa IDE on siis LibreOffice Basic ympäristö. Oikeastaan kiinnostuin uudelleen koodaamisesta rajoitusten vuoksi joita em. pakettiin sisältyy. Vaikka [Star]Basicin ja VBA-tuen aktiivinen kehittäminen on ollut pois kuvioista jo pitkään sillä ja UNO:lla saa aikaan yllättävän paljon rajoitteista huolimatta. LibreOffice on menossa Pythonin pauloihin lähes tykkänään, Basic on ainoastaan mukana sen vuoksi, että jos se tiputettaisiin pois monen harrastuksena koodaavan makrot kävisivät kertaheitolla täysin hyödyttömiksi mikäli päivittäisivät LibreOfficensa. Versioon 24.8.4.2 sisältyy Python joskaan ei täydellinen, pip puuttuu, eikä se lataudu kun avaa IDE:n ja valitsee makrokieleksi Pythonin vaan vaatii erillisen (extension) lisäpalikan, mutta käytössä on kuitenkin yhä edelleen com.sun.star...API palveluineen. LibreOffice yhteisön ylipapit ilmoittelivat, että uusimmassa versiossa 25.2 Python olisi mukana ja toimisi ilman erillistä extension palikkaa, en ole kuitenkaan kokeillut enkä aio kokeilla. Tästä vanhemmastakin versiosta poistin kaiken minulle turhan Python sälän (suoraan sanottuna: I hate it, especially its syntax...and everything)

Tässä pari video clippiä vanhan VBA-virityksen pohjalta LibreOffice/Calc/Basic ympäristössä väännetystä uudelleenvirityksestä

Vastaus

Muista lukea kirjoitusohjeet.
Tietoa sivustosta