Die Aufgabe war: Ein Python-Script soll Daten aus einer Excel-Tabelle, also einer xlsx-Datei lesen. Dieses Python-Script wird als Task in Gradle aufgerufen.

Python und pip (pip ist sowas wie der npm für Python) kann als installiert vorausgesetzt werden, spezielle Libraries aber nicht.

Verwendete Tools

Alles kein Problem, wenn man die richtigen Werkzeuge einsetzt:

  • Um die richtigen Module zu laden und Python zu starten, lässt sich in gradle das gradle-use-python-plugin verwenden.
  • Unter den zahlreichen Bibliotheken, die Excel-Sheets in Python lesen, habe ich mich für openpyxl entschieden.

Die build.gradle

Zunächst muss gradle natürlich das plugin kennen:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'ru.vyarus:gradle-use-python-plugin:2.3.0'
    }
}
apply plugin: 'ru.vyarus.use-python'

Dann muss mit Hilfe von pip das openpyxl geladen werden:

python {
    pip 'openpyxl:3.0.10'
}

Und schließlich muss das Python-script in der richtigen Weise aufgerufen werden, beispielsweise so:

task callSomePythonScript(type: PythonTask) {
    group 'other'
    description 'call a python script'

    File script = file "scripts/doWhatHasToBeDone.py"
    command = [script, "argument1", "argument2" ]
}

Das python-Script

Jetzt kann in python problemlos auf die Daten im xslx-File zugriffen werden. Erst der Import:

import openpyxl

und dann der Zugriff (in diesem Beispiel ist nur die dritte Spalte relevant):

def read_excel_file(excel_file):
    # Check if file exists
    if excel_file is not None and exists(excel_file):
        workbook = openpyxl.load_workbook(excel_file)
        worksheet = workbook.active

        # Iterate the loop to read the cell values
        for row in worksheet.iter_rows():
            doc = row[2].value
            if doc is not None:
                print(doc)
    else:
        print("File not found")