Application

Remember, always import library.

import easymacro as app

Create instances

  • Instances without context

toolkit = app.create_instance("com.sun.star.awt.Toolkit")
  • Instances with context

service = 'com.sun.star.awt.DialogProvider2'
dialog = app.create_instance(service, True)
  • Get desktop

desktop1 = app.create_instance('com.sun.star.frame.Desktop', True)
# ~ or
desktop2 = app.get_desktop()

app.msgbox(desktop1 == desktop2)

Current doc

doc = app.active
app.msgbox(doc.title)

Iter docs

for doc in app.docs:
    app.msgbox(doc.title)

Count

count = len(app.docs)
app.msgbox(count)

Get by name

name = 'MyDoc.ods'
if name in app.docs:
    doc = app.docs[name]
    app.msgbox(doc.title)

If contain

result = 'myfile.ods' in app.docs
app.msgbox(result)

New

For default create new Calc document.

doc = app.docs.new()
app.msgbox(doc.type)

For new Writer document.

doc = app.docs.new('writer')
app.msgbox(doc.type)

With arguments.

args= {'Hidden': True}
doc = app.docs.new('writer', args)
msg = f'{doc.type} - {doc.title}'
app.msgbox(msg)
doc.visible = True

Other documents.

doc = app.docs.new('draw')
app.msgbox(doc.type)

doc = app.docs.new('impress')
app.msgbox(doc.type)

Open

path = '/home/mau/MyDoc.ods'
doc = app.docs.open(path)

While LibreOffice support format, you can open arbitrary file.

path = '/home/mau/example.xlsx'
doc = app.docs.open(path)

With arguments.

path = '/home/mau/example.odt'
args = {'Password': 'letmein'}
doc = app.docs.open(path, args)

Save

path = '/home/mau/myfile.ods'
doc = app.docs.new()
doc.save(path)
  • If previously open and modify any file.

doc.save()
  • Open exists file and save with other name.

path = '/home/mau/myfile.ods'
doc = app.docs.open(path)
new_path = '/srv/mau/other_name.ods'
doc.save(new_path)

Close

doc = app.docs.new()
app.msgbox(doc.title)
doc.close()

To PDF

  • Save in path

doc = app.active
path = '/home/mau/test.pdf'
doc.to_pdf(path)
  • Save in memory

doc = app.active
pdf = doc.to_pdf()

Export

  • Export common formats

doc = app.docs.new()
path = '/home/mau/myfile.xlsx'
filter_name = 'xlsx'
doc.export(path, filter_name)

path = '/home/mau/myfile.xls'
filter_name = 'xls'
doc.export(path, filter_name)

doc = app.docs.new('writer')
path = '/home/mau/myfile.docx'
filter_name = 'docx'
doc.export(path, filter_name)

path = '/home/mau/myfile.doc'
filter_name = 'doc'
doc.export(path, filter_name)

path = '/home/mau/myfile.rtf'
filter_name = 'rtf'
doc.export(path, filter_name)
  • For all support formats look Apendix

  • Export in memory.

doc = app.docs.new()
filter_name = 'xlsx'
excel_doc = doc.export(filter_name=filter_name)

Fonst

  • Get all fonts

fonts = app.get_fonts()
for f in fonts:
    print(f'Name: {f.Name} - StyleName: {f.StyleName}')

Filters

filters = app.get_filters()
ds = []
for f in filters:
    data = f"UI Name: {f['UIName']} - Name: {f['Name']} - Type: {f['Type']}"
    app.debug(data)

Call dispatch

You can call any dispatch command used only if property or method no exists in original object or in easymacro.py

doc = app.active
command = '.uno:Gallery'
app.call_dispatch(doc, command)

Properties

obj

  • Get original object pyUNO (read only)

doc = app.active
app.msgbox(type(doc))
app.msgbox(type(doc.obj))

title

doc = app.active
app.msgbox(doc.title)
doc.title = 'New title'
app.msgbox(doc.title)

type

  • Get type document: calc, writer, etc. (read only)

doc = app.active
app.msgbox(doc.type)

uid

  • Get internal RuntimeUID form document. (read only)

doc = app.active
app.msgbox(doc.uid)

is_saved

  • If document is saved in this or not (read only)

doc = app.active
app.msgbox(doc.is_saved)

is_modified

  • If document has been modified (read only)

doc = app.active
app.msgbox(doc.is_modified)

is_read_only

doc = app.active
app.msgbox(doc.is_read_only)

path

  • Get path of document. (read only)

doc = app.active
app.msgbox(doc.path)

dir

  • Get only directory from path saved (read only)

doc = app.active
app.msgbox(doc.dir)

file_name

  • Get only file name from path saved (read only)

doc = app.active
app.msgbox(doc.file_name)

name

  • Get only name without extension (read only)

doc = app.active
app.msgbox(doc.file_name)

visible

  • Hide or show document.

doc = app.active
doc.visible = False
app.msgbox(doc.visible)
doc.visible = True

zoom

  • Get or set zoom value.

doc = app.active
zoom = doc.zoom
app.msgbox(zoom)
doc.zoom = zoom * 2
app.msgbox(doc.zoom)
doc.zoom = zoom

selection

  • CAUTION: Selection can be many things.

doc = app.active
selection = doc.selection
app.msgbox(selection)

status_bar

  • Get status bar, always control in other thread.

@app.run_in_thread
def update_status_bar(sb, text, limit):
    sb.start(text, limit)
    for i in range(limit):
        sb.setValue(i)
        app.sleep(1)
    # ~ Is important free status bar
    sb.end()
    return

def main():
    doc = app.active
    update_status_bar(doc.status_bar, 'Line', 10)
    return

Methods

set_focus

name = 'MyDoc.ods'
if name in app.docs:
    doc = app.docs[name]
    doc.set_focus()

copy

  • Copy current selection

doc = app.active
doc.copy()

paste

  • Paste any content in clipboard

doc = app.active
doc.paste()