Подготовка
Для примера и для программирования потребуется следующее:
- Rfem 6
- EXCEL
- Python
- Dlubal RFEM_Python_Client
- Библиотека xlwings Python
- Редактор для написания программы
Предполагая, что RFEM 6, EXCEL и Python уже установлены, следующим шагом будет установка библиотек RFEM_Python_Client. Мы предлагаем различные обучающие видеоролики и справочные страницы с описанием установки. Следующие ссылки особенно важны для установки. Они показывают процесс установки, а также первые шаги в программировании:
- Перед началом работы
- Программирование с помощью RFEM 6 и Python | 003 Установка
- Программирование с помощью RFEM 6 и Python | 004 Базы данных
- Программирование с помощью RFEM 6 и Python | 005 Пример | консоль
В этих видеороликах также рассказывается о программных редакторах. Для данного примера используемый редактор не имеет значения. Затем необходимо установить xlwings, соответствующую информацию можно найти на сайте библиотеки:
Полный код, например, находится в RFEM_Python_Client по следующему пути:
- RFEM_Python_Client/tree/main/Examples/SteelDesign/
Файл SteelDesignExcel.py - это программа (скрипт) Python, а файл SteelDesignExcel.xlsm - это связанный файл EXCEL.
Пример для программирования
Библиотека xlwings предлагает несколько вариантов сочетания Python и EXCEL. С одной стороны, можно управлять EXCEL из программы Python (более известной как скрипт Python), а также запускать скрипт Python из EXCEL. При запуске из EXCEL вы можете либо использовать встроенный подключаемый модуль, либо создать подпрограмму, которая затем запускает скрипт Python. Подробности показаны здесь:
В нашем примере скрипт Python запускается через встроенный плагин (см. рисунок). Есть два требования. Скрипт Python должен иметь то же имя, что и файл EXCEL, и должен включать в себя основную функцию, поскольку затем эта функция выполняется через подключаемый модуль.
Вот первая часть основной функции:
...
# Откройте лист Excel
wb = xw.Book.caller()
# Читать исходные данные
inputSheet = wb.sheets('Inputs')
frame_number = 6
width = 10
frame_length = 4
console_height = 3
column_height = 4
gable_height = 2
# Геометрические исходные данные
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
...
Если xlwings используется непосредственно из скрипта Python (не через EXCEL), сначала необходимо открыть файл:
wb = xw.Book('userSheet.xlsm')
Если xlwings используется вне EXCEL, соединение устанавливается с помощью следующей команды:
wb = xw.Book.caller()
Переменная wb включает в себя всю рабочую книгу, из которой можно извлечь отдельные рабочие листы с помощью метода листов (). В этом примере открывается рабочий лист «Входные данные», и доступ к отдельным ячейкам осуществляется с помощью квадратных скобок. Значение ячейки можно прочитать или изменить с помощью свойства 'value'. Эту имплементацию можно найти в конце примера:
...
# Запись результатов в выходные листы
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
...
В данном случае считывается сочетание нагрузок 7. In Abbildung 1 werden die Verformungen der Stäbe in EXCEL dargestellt und zum Vergleich in Abbildung 2 die Ergebnisse aus RFEM 6.
Заключение
На примере видно, что после настройки всех необходимых элементов пользоваться API достаточно просто. EXCEL в основном используется в качестве графического пользовательского интерфейса, и знание Visual Basic для приложений (VBA) не требуется. Также возможно, что расчёты ведутся в EXCEL (также через VBA), а Python только импортирует или экспортирует данные посредством xlwings.