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.
The PythonInR
package can be installed from CRAN or from the https://bitbucket.org/Floooo/pythoninr/, where you can also find instructions for installation and setup.
The Python-UNO bridge has to be available in the Python installation that PythonInR
connects to.
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.
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.
An online version of the package documentation can be found on pkgdown.jrwb.de.
GPL