Learn R Programming

rlo

The R package rlo uses the UNO API of libreoffice to write to existing libreoffice writer documents.

This is useful for useRs that appreciate the functionality of the libreoffice writer for writing documents, but would like to be able to insert results from R calculations.

However, on Linux it is also possible to start, populate and save libreoffice documents without even touching the GUI:

library(rlo)
rlo_start(file = "test.odt", overwrite = TRUE)

rlo_heading("Example heading", 1)
table_data = data.frame(
  City = c("München", "Berlin"),
  "Elevation\n[m]" = c(520, 34),
  check.names = FALSE)

rlo_table(table_data, "Two major cities in Germany")

rlo_quit()

rlo depends on the R package PythonInR and the python bindings of libreoffice called the Python-UNO bridge.

PythonInR

The PythonInR package can be installed from CRAN or from the [https://bitbucket.org/Floooo/pythoninr/](bitbucket repo), where you can also find instructions for installation and setup.

Python-UNO bridge

The Python-UNO bridge has to be available in the Python installation that PythonInR connects to.

Linux

On Debian and possibly on derived distributions, setting up the Python-UNO bridge can be as easy as

apt install python-uno

Alternatively, you may want python3-uno if you are using Python 3.

Windows

You may also find that it is possible to use this package on Windows, with the limitation that I did not find a way to start LibreOffice from R. Therefore, the functions rlo_start and rlo_new give an error on windows.

As rlo uses PythonInR with the option to use numpy (pyOption(useNumpy=TRUE)), I installed WinPython in a version matching the minor release version of the Python coming with Libreoffice. In the case of LibreOffice 5.1.6.2, I used WinPython-32bit-3.3.5.9 built on 28th of June 2015, as it was the last release of python 3.3 from this project.

After installing this, I had success using the following code in my .Rprofile:

# We need to have 'soffice' in the path and we need to set environment
# variables necessary for the Python-UNO bridge
# This is ported to R and adapted to LibreOffice 5 from
# http://sg.linuxtreff.ch/2012/libreoffice-dokumente-mit-python-generieren/
lo_path = "E:/Program Files/LibreOffice 5/program"
lo_py = file.path(lo_path, "python.exe")
uno_env <- system2(lo_py,
  shQuote(system.file("py/get_uno_env.py", package = "rlo")),
  stdout = TRUE)

# Set environment variables for python interpreter
Sys.setenv(URE_BOOTSTRAP=uno_env[1])
Sys.setenv(UNO_PATH=uno_env[2])
Sys.setenv(PATH=uno_env[3])

# To get the uno module onto the path
Sys.setenv(PYTHONPATH=lo_path)

# Then set the path to local python installation
py_path = "e:/WinPython-32bit-3.3.5.9/python-3.3.5"
Sys.setenv(PYTHON_EXE=file.path(py_path, "python.exe"))

I made a shortcut on my Desktop containing the following command:

"E:\Program Files\LibreOffice 5\program\soffice.exe" "-accept=socket,host=localhost,port=8100;urp;"

With this setup, I can load rlo. Before connecting to the LibreOffice instance started by the shortcut, a text document has to be opened.

Documentation

An online version of the package documentation can be found on github.io.

Copy Link

Version

Install

install.packages('rlo')

Monthly Downloads

2

Version

0.3.2

License

GPL

Maintainer

Johannes Ranke

Last Published

November 25th, 2016

Functions in rlo (0.3.2)

rlo_start

Start libreoffice writer
rlo_connect

Connect to the current LibreOfficeWriter document
rlo_scursor

Get the current view cursor in the active document
rlo_dispatch

Use the dispatcher for GUI functions
rlo_parstyle

Apply a paragraph style if it exists
rlo_pdf

Export to PDF
rlo_table

Insert a table into the connected document
rlo_quit

Quit a libroffice instance
rlo_figure

Insert an SVG graph into the connected document
rlo_heading

Insert a heading