3990x
001790
23. Januar 2023

Nutzung der Webservice API in Verbindung mit EXCEL und Python

Tabellenkalkulationsprogramme wie EXCEL erfreuen sich großer Beliebtheit bei Ingenieuren, da Berechnungen auf einfache Weise automatisieren und Ergebnisse schnell ausgegeben werden können. Die Verbindung von EXCEL als grafische Oberfläche und der Webservice API ist daher naheliegend. Mithilfe der freien Bibliothek xlwings für Python ist es möglich, EXCEL anzusteuern und Werte auszulesen und zu schreiben. Im Folgenden wird daher an einem Beispiel diese Funktionsweise erläutert.

Vorbereitungen

Für das Beispiel und die Programmierung wird Folgendes benötigt:

  • RFEM 6
  • EXCEL
  • Python
  • Dlubal RFEM_Python_Client
  • Python-Bibliothek xlwings
  • Ein Editor zum Schreiben des Programms

Ausgehend davon, dass RFEM 6, EXCEL und Python bereits installiert sind, muss als Nächstes die Bibliotheken RFEM_Python_Client installiert werden. Wir bieten hierfür diverse Lernvideos und Hilfeseiten an. Folgende Links sind für die Installation besonders wichtig. Sie zeigen die Installation und die ersten Schritte in der Programmierung:

In den Videos wird auch auf Programmeditoren eingegangen. Für das Beispiel ist unerheblich, welcher Editor genutzt wird. Danach muss noch xlwings installiert werden, Hinweise dazu finden Sie auf der Webseite zur Bibliothek:

Der vollständige Code zum Beispiel befindet sich im RFEM_Python_Client in folgendem Pfad:

  • RFEM_Python_Client/tree/main/Examples/SteelDesign/

Die Datei SteelDesignExcel.py ist das Python-Programm (Script) und SteelDesignExcel.xlsm ist die zugehörige EXCEL-Datei.

Beispiel für Programmierung

Die Bibliothek xlwings bietet mehrere Möglichkeiten zur Kombination von Python und EXCEL. Es ist zum einen möglich, aus einem Python-Programm (besser Python-Script) heraus EXCEL zu steuern und auch aus EXCEL heraus ein Python-Script zu starten. Beim Starten aus EXCEL kann man entweder das eingebaute Plugin nutzen oder eine Sub-Routine erstellen, welche dann das Python-Script startet. Die Details dazu können hier eingesehen werden:

Das Beispiel nutzt die Variante, bei der das Python-Script über das eingebaute Plugin gestartet wird (siehe Abbildung). Für diese Nutzung gibt es zwei Voraussetzungen. Das Python-Script muss den gleichen Namen haben wie die EXCEL-Datei und es muss eine main-Funktion enthalten, da diese dann über das Plugin ausgeführt wird.
Hier der erste Teil der main-Funktion:


            

...
# Open the excel sheet
wb = xw.Book.caller()

# Read inputs
inputSheet = wb.sheets('Inputs')

frame_number = 6
width = 10
frame_length = 4
console_height = 3
column_height = 4
gable_height = 2

# Geometric Inputs
frame_number = int(inputSheet["G6"].value)  # number of frames
width = inputSheet["G7"].value # Width of Frame
frame_length = inputSheet["G8"].value # Frame Length
console_height = inputSheet["G9"].value # Height of Console
column_height = inputSheet["G10"].value # Height of Column
gable_height = inputSheet["G11"].value # Height of Gable
...


Wenn xlwings aus einem Python-Script direkt (nicht über EXCEL) genutzt wird, muss zuerst eine Datei geöffnet werden:


            

wb = xw.Book('userSheet.xlsm')


Wenn die Nutzung aus EXCEL heraus erfolgt, dann wird die Anbindung über den folgenden Befehl hergestellt:


            

wb = xw.Book.caller()


Die Variable wb beinhaltet die komplette Arbeitsmappe (Workbook) wo mithilfe der Methode sheets() dann einzelne Arbeitsblätter herausgeholt werden können. Im Beispiel wird das Arbeitsblatt "Inputs" geöffnet und über die eckigen Klammern erfolgt der Zugriff auf einzelne Zellen. Mit der Eigenschaft value kann der Wert einer Zelle ausgelesen oder auch modifiziert werden. Diese Umsetzung ist dann am Ende des Beispiels zu finden:


            

...
# Writing Results to Output Sheets
nodaldeformation["A2"].value = node_number
nodaldeformation["B2"].value = nodeSupportType
nodaldeformation["C2"].value = nodeDisp_abs
nodaldeformation["D2"].value = nodeDisp_x
nodaldeformation["E2"].value = nodeDisp_y
nodaldeformation["F2"].value = nodeDisp_z
nodaldeformation["G2"].value = nodeRotation_x
nodaldeformation["H2"].value = nodeRotation_y
nodaldeformation["I2"].value = nodeRotation_z
...


Im konkreten Fall wird die Lastkombination 7 ausgelesen. In Abbildung 2 werden die Verformungen der Stäbe in EXCEL dargestellt und zum Vergleich in Abbildung 3 die Ergebnisse aus RFEM 6.

Zusammenfassung

Im Beispiel wird ersichtlich, dass die Nutzung nach dem Einrichten aller erforderlichen Elemente relativ einfach gestaltet ist. EXCEL wird hier vor allem als grafische Oberfläche genutzt und VBA Kenntnisse sind nicht erforderlich. Es ist auch möglich, dass Berechnungen in EXCEL (auch über VBA) durchgeführt werden und Python mit xlwings nur Daten importiert bzw. exportiert.


Autor

Herr Günthel kümmert sich im Kundensupport um die Anliegen unserer Anwender.

Links