Macros/Basic/Documents
< Macros
TDF LibreOffice Document Liberation Project Community Blogs Weblate Nextcloud Redmine Ask LibreOffice Donate
Active document
Sub Main()
doc = ThisComponent
MsgBox doc.Title
End Sub
All open documents
For Each doc In StarDesktop.Components
MsgBox doc.Title
Next
New documents
- Calc
Dim path As String
Dim args()
path = "private:factory/scalc"
doc = StarDesktop.loadComponentFromURL(path, "_default", 0, args())
- For Writer:
"private:factory/swriter"
- For Impress:
"private:factory/simpress"
- For Draw:
"private:factory/sdraw"
- For Math:
"private:factory/smath"
- For Base
Dim path As String, dbc As Object, db As Object
Dim args()
path = ConvertToURL("/home/USER/My_db.odb")
dbc = createUnoService("com.sun.star.sdb.DatabaseContext")
db = dbc.createInstance()
db.URL = "sdbc:embedded:firebird"
db.DatabaseDocument.storeAsURL(path, args())
Open documents
Dim path As String
Dim doc As Object
Dim args()
path = ConvertToUrl("/home/USER/My_file_Calc.ods")
doc = StarDesktop.loadComponentFromURL(path, "default", 0, args())
Using argument for open
- For open like template
Dim path As String
Dim doc As Object
Dim args(0) As New "com.sun.star.beans.PropertyValue"
args(0).Name = "AsTemplate"
args(0).Value = True
path = ConvertToUrl("/home/USER/My_file_Calc.ods")
doc = StarDesktop.loadComponentFromURL(path, "default", 0, args())
- Or, open normal if file it’s template
args(0).Name = "AsTemplate"
args(0).Value = False
path = ConvertToUrl("/home/USER/My_template_Calc.odt")
doc = StarDesktop.loadComponentFromURL(path, "default", 0, args())
- Other common arguments, open read only.
args(0).Name = "ReadOnly"
args(0).Value = True
- With password
args(0).Name = "Password"
args(0).Value = "letmein"
- With active macros
args(0).Name = "MacroExecutionMode"
args(0).Value = 4
- Automatic start presentation
args(0).Name = "StartPresentation"
args(0).Value = True
- Like view preview
args(0).Name = "Preview"
args(0).Value = True
- Open hidden
args(0).Name = "Hidden"
args(0).Value = True
Open with dialog box
Dim dlg_select_file as Object
Dim files() As String
Dim args()
Dim path As String
Dim doc As Object
dlg_select_file = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
dlg_select_file.setTitle("Select one file")
If dlg_select_file.Execute() Then
path = dlg_select_file.getFiles()(0)
doc = StarDesktop.loadComponentFromURL(path, "_default", 0, args())
End If
Save document
- For open documents
path = ConvertToUrl("/home/USER/My_file_Calc.ods")
doc = StarDesktop.loadComponentFromURL(path, "default", 0, args())
MsgBox doc.Title
doc.store()
doc.close(True)
- For new documents
Dim args()
path = "private:factory/scalc"
doc = StarDesktop.loadComponentFromURL(path, "_default", 0, args())
path = ConvertToUrl("/home/mau/new_doc_calc.ods")
doc.storeAsURL(path, args())
- Using other options, save with password
Dim args(0) As New "com.sun.star.beans.PropertyValue"
path = "private:factory/scalc"
doc = StarDesktop.loadComponentFromURL(path, "_default", 0, args())
args(0).Name = "Password"
args(0).Value = "letmein"
path = ConvertToUrl("/home/mau/new_doc_calc.ods")
doc.storeAsURL(path, args())
- Using filter for change format
Dim args(0) As New "com.sun.star.beans.PropertyValue"
path = "private:factory/swriter"
doc = StarDesktop.loadComponentFromURL(path, "_default", 0, args())
args(0).Name = "FilterName"
args(0).Value = "MS Word 97"
path = ConvertToUrl("/home/mau/new_doc_Word.doc")
doc.storeAsURL(path, args())
Save with dialog box
Only show the selected path for user, you need add code for save in line 15.
Dim dlg_save as Object
Dim mArchivo() As String
Dim mOpciones()
dlg_save = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
'com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_AUTOEXTENSION_PASSWORD = 2
With dlg_save
.Initialize(Array(2))
.AppendFilter("Text documents ODF (.odt)", "*.odt" )
.AppendFilter("Spreadsheet ODF (.ods)", "*.ods" )
End With
If dlg_save.Execute() Then
path = dlg_save.getFiles()(0)
MsgBox ConvertFromUrl(path)
End If
Export to PDF
- For Calc document
Dim args(0) As New "com.sun.star.beans.PropertyValue"
Dim path As String
Dim doc As Object
doc = ThisComponent
args(0).Name = "FilterName"
args(0).Value = "calc_pdf_Export"
path = ConvertToURL("/home/USER/output.pdf")
doc.storeToURL(path, args())
- For Writer document
args(0).Name = "FilterName"
args(0).Value = "writer_pdf_Export"
- For Draw document
args(0).Name = "FilterName"
args(0).Value = "draw_pdf_Export"
- For Impress document
args(0).Name = "FilterName"
args(0).Value = "impress_pdf_Export"
Set focus
documents = StarDesktop.getComponents()
enumeration = documents.createEnumeration()
Do While enumeration.hasMoreElements()
doc = enumeration.nextElement()
window = doc.CurrentController.Frame.ComponentWindow
window.setFocus()
REM Sleep 1.5 seconds
Wait 1500
Loop
Status bar
doc = ThisComponent
status_bar = doc.CurrentController.StatusIndicator
REM Set initial text and limit value
status_bar.start("In line ", 10)
For i = 1 To 10
status_bar.setValue(i)
status_bar.setText("Line: " & i)
Wait 1000
Next
REM Important for free status bar
status_bar.end()
Zoom
doc = ThisComponent
cc = doc.CurrentController
cc.ZoomValue = 150