Skip to content

Repository files navigation

Eurostat Data for Calc

Release

A LibreOffice Calc add-in that adds a spreadsheet function, EUROSTATDATA, for pulling data straight from the Eurostat REST API (JSON-stat 2.0 format) into a sheet.

=EUROSTATDATA("nama_10_gdp"; "geo=DE;time=2023;unit=CP_MEUR")

returns a table that spills into the sheet: a header row (one column per dimension, plus value), followed by one row per observation.

On failure (unknown dataset code, rate limiting, network error) the function returns a single cell containing a readable #ERROR: ... message instead of a cryptic Err:5xx.

Requirements

  • A LibreOffice install with Java enabled (Tools ▸ Options ▸ LibreOffice ▸ Advanced ▸ Use a Java runtime environment).
  • A JDK to build from source (JDK 8+ is enough — the code is deliberately Java 8-compatible and has no external dependencies: no Jackson, no Maven, nothing to download).
  • The LibreOffice SDK matching your LibreOffice install (ships with LibreOffice, or install the libreoffice-sdk package). build.sh expects it at <LibreOffice install>/sdk.

Building

./build.sh

This runs the LibreOffice SDK's own toolchain end to end — unoidl-write (compiles the custom UNO interface), javamaker (generates its Java stub), javac, jar, then zips everything into build/EurostatAddin-<version>.oxt. No Maven, no network access needed to build.

Windows: use the PowerShell equivalent instead:

.\build.ps1

It auto-detects the LibreOffice install (C:\Program Files\LibreOffice) and a JDK 8+ (e.g. Eclipse Temurin under C:\Program Files\Eclipse Adoptium). Override either with the LO_HOME or JDK environment variables before running.

Edit the LO_HOME and JDK variables at the top of build.sh if your LibreOffice or JDK live somewhere other than /home/davidj/libreoffice26.2 and /home/davidj/jdks/jdk8u492-b09.

Installing

Prebuilt: grab EurostatAddin-1.0.7.oxt from the v1.0.7 release — no build step needed.

From source: build it yourself with ./build.sh (see above), which produces the same file at build/EurostatAddin.oxt.

Either way, install it by double-clicking the .oxt to open it in the Extension Manager, or from a terminal:

/path/to/libreoffice/program/unopkg add EurostatAddin-1.0.7.oxt

Restart Calc if it was already open. The function then appears under the Eurostat category in the Function Wizard.

Demo

demo/Eurostat-Demo.ods (also attached to the v1.0.7 release) is a real spreadsheet with several EUROSTATDATA(...) formulas already entered and computed against live Eurostat data — open it to see the function working without typing anything (it needs the add-in installed first, see above, or the formulas show #NAME?). It also demonstrates the error path with an unknown dataset code.

It was generated with tools/BuildDemoSheet.java, which drives a headless Calc instance over the UNO API to enter the formulas, recalculate, and save the file — useful as a worked example of scripting Calc from Java, and to regenerate the demo after changing the add-in.

Usage

=EUROSTATDATA(datasetCode; filters)
  • datasetCode — a Eurostat dataset code, e.g. nama_10_gdp.
  • filters — optional dimension filters as key=value pairs separated by ;, e.g. "geo=DE;time=2023;unit=CP_MEUR". Pass "" for no filtering. See the filters cheatsheet for syntax, gotchas, reserved parameters, and common dimension keys.

Enter it as an array formula so the whole table spills out: select a range large enough for the result, type the formula, and confirm with Ctrl+Shift+Enter (recent LibreOffice versions with dynamic array support will spill automatically from a single cell).

Examples

=EUROSTATDATA("nama_10_gdp"; "geo=DE;time=2023;unit=CP_MEUR")
=EUROSTATDATA("une_rt_a"; "geo=FR;time=2023")
=EUROSTATDATA("tec00118"; "geo=DE;sinceTimePeriod=2015")

The last example uses sinceTimePeriod, one of Eurostat's own reserved query parameters (not a dimension) — useful for pulling a whole year range back in one call. lastTimePeriod works the same way. Any filter key you pass goes straight into the API query string.

Common dataset codes

Code Description
nama_10_gdp GDP and main components
une_rt_a Unemployment rate (annual)
demo_pjan Population on 1 January
prc_hicp_manr HICP inflation (annual rate, monthly)
tec00114 Real GDP growth rate
tec00118 HICP inflation (annual rate, yearly)

Browse the full catalogue at the Eurostat Data Browser.

Project layout

idl/org/libreoffice/eurostat/addin/XEurostatAddin.idl   custom UNO interface for the function
src/main/java/org/libreoffice/eurostat/addin/           the UNO add-in component
src/main/java/com/eurostat/fetcher/client/               HTTP client (HttpURLConnection) with retry/backoff
src/main/java/com/eurostat/fetcher/json/                 hand-rolled JSON parser (no external deps)
src/main/java/com/eurostat/fetcher/parser/                JSON-stat 2.0 -> flat observation list
src/main/java/com/eurostat/fetcher/model/                 Observation POJO
packaging/                                                 .oxt manifest/description sources
build.sh                                                   builds build/EurostatAddin.oxt
test/SmokeTest.java                                        calls the add-in logic directly (no soffice needed)
test/LiveCalcTest.java                                     end-to-end check against a real headless Calc instance

Notes

  • The Eurostat API is free and requires no API key.
  • Retries (429/5xx) use exponential backoff capped at a few seconds, since a Calc formula recalculating blocks the UI while it runs — this isn't tunable from the sheet, only in EurostatClient.
  • Large datasets may need additional dimension filters to stay within response size limits.

License

MIT

About

LibreOffice Calc to pull data from EuroStats

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages