Příprava
Pro příklad a programování je potřeba:
- RFEM 6
- EXCEL
- Python
- Dlubal RFEM_Python_Client
- Pythonovská knihovna xlwings
- Editor pro psaní programu
Za předpokladu, že již máme nainstalované programy RFEM 6, EXCEL a Python, je dalším krokem instalace knihoven RFEM_Python_Client. Nabízíme k tomu různá výuková videa a stránky nápovědy. Následující odkazy jsou pro instalaci zvláště důležité. Ukazují instalaci a první kroky při programování:
- Než začnete
- Programování v RFEM 6 a Pythonu | 003 Instalace
- Programování v RFEM 6 a Pythonu | 004 Knihovny
- Programování v RFEM 6 a Pythonu | 005 Příklad | Konzola
Ve videích se také mluví o editorech pro programování. Pro tento příklad není důležité, který editor se použije. Nakonec je třeba nainstalovat xlwings, informace k tomu najdete na webových stránkách knihovny:
Kompletní kód příkladu se nachází v RFEM_Python_Client na následující adrese:
- RFEM_Python_Client/tree/main/Examples/SteelDesign/
Soubor SteelDesignExcel.py je program (skript) v jazyce Python a soubor SteelDesignExcel.xlsm je příslušný soubor EXCEL.
Příklad programování
Knihovna xlwings nabízí několik možností, jak zkombinovat Python a EXCEL. Jednak je možné ovládat EXCEL z programu v Pythonu (známějšího jako Python skript) nebo lze také spustit Python skript z EXCELu. Při spouštění z EXCELu můžete buď použít vestavěný plugin, nebo vytvořit subroutinu, která pak spustí Python skript. Podrobnosti si můžete prohlédnout zde:
V příkladu je použita varianta, ve které se Python skript spouští pomocí vestavěného pluginu (viz obrázek). Pro toto použití jsou nutné dva předpoklady. Skript v Pythonu se musí jmenovat stejně jako soubor EXCEL a musí obsahovat funkci main, která se pak provádí prostřednictvím pluginu.
Zde je první část funkce main:
…
# 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"]. hodnota # Výška konzoly
column_height = inputSheet["G10"].value # Height of Column
gable_height = inputSheet["G11"].value # Height of Gable
…
Pokud použijete xlwings přímo z Python skriptu (nikoli přes EXCEL), je třeba nejprve otevřít soubor:
wb = xw.Book('userSheet.xlsm')
Pokud se používá spuštění z EXCELu, naváže se pomocí následujícího příkazu:
wb = xw.Book.caller()
Proměnná wb obsahuje kompletní sešit (Workbook), ze kterého lze metodou sheets() extrahovat jednotlivé listy. V našem příkladu se otevře list "Inputs" a jednotlivé buňky jsou přístupné pomocí hranatých závorek. Hodnotu buňky lze načíst nebo upravit pomocí vlastnosti value. Tuto implementaci najdete na konci příkladu:
…
# 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
…
V tomto konkrétním případě se načte kombinace zatížení 7. Na obrázku 1 jsou znázorněny deformace prutů v programu EXCEL a pro srovnání výsledky z programu RFEM 6 na obrázku 2.
Závěr a výhled
Na příkladu je vidět, že po nastavení všech potřebných prvků je ovládání poměrně snadné. EXCEL se používá především jako grafické uživatelské rozhraní a znalost VBA není nutná. Je také možné, že výpočty se provedou v programu EXCEL (i přes VBA) a Python pomocí xlwings pouze importuje nebo exportuje data.