145x
004331
23.1.2023

KB 001790 | Použití Webové služby API ve spojení s programy EXCEL a Python

Téma:
Použití Webové služby API ve spojení s programy EXCEL a Python

Poznámky:
Tabulkové programy jako EXCEL jsou mezi inženýry velmi oblíbené, protože umožňují snadnou automatizaci výpočtů a rychlé získání výsledků. Propojení EXCELu jako grafického uživatelského rozhraní a Webové služby API je tak nasnadě. Pomocí volně dostupné knihovny xlwings pro Python můžete ovládat EXCEL, číst a zapisovat hodnoty. Tato funkce je proto níže vysvětlena na příkladu.

Popis:

Přípravy

Pro příklad a programování je potřeba:

  • RFEM 6
  • EXCEL
  • Python
  • Program Dlubal RFEM_Python_Client
  • Knihovna xlwings v Pythonu
  • Editor pro psaní programu

Za předpokladu, že již máme nainstalované programy RFEM 6, EXCEL a Python, je třeba nejprve nainstalovat knihovny 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é. Ukáže vám instalaci a první kroky při programování:

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:

  1. code.de#

...

  1. Otevřete tabulku aplikace Excel

wb = xw.Book.caller()

  1. Načíst vstupy

inputSheet = wb.sheets('Inputs')

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

  1. Geometrické vstupy

číslo_rámce = int (vstupní hodnota na listu ["G6"]) #počet rámců
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
...

  1. /#

Pokud použijete xlwings přímo z Python skriptu (nikoli přes EXCEL), je třeba nejprve otevřít soubor:

  1. code.de#

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

  1. /#

Pokud se používá spuštění z EXCELu, naváže se pomocí následujícího příkazu:

  1. code.de#

wb = xw.Book.caller()

  1. /#

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:

  1. code.de#

...

  1. Writing Výsledky do výstupních listů

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
...

  1. /#

V tomto konkrétním případě se načte kombinace zatížení 7. Na obrázku 2 jsou znázorněny deformace prutů v programu EXCEL a na obrázku 3 pro srovnání výsledky z programu RFEM 6.

Shrnutí

V příkladu...



;