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
Tuli vaan tästä mieleen, että eikös libreofficella ole oma api filepickerille?
LOfficella ei ole mitään, kaikki on OOfficen peruja.
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?