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?
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ä