3697x
001790
2023-01-23

将网络服务 API 与 EXCEL 和 Python 结合使用

像 EXCEL 这样的电子表格软件很受工程师欢迎,工程师们使用它可以轻松进行计算并快速得出结果。 因此将图形界面 MS EXCEL 与德儒巴网络服务应用程序编程接口相结合是一个很好的选择。 借助免费的 xlwings 库,可以控制 EXCEL 以及读写数值。 下面将举例说明该功能。

准备

需要安装以下软件、库和编辑器:

  • RFEM 6
  • EXCEL
  • Python
  • Dlubal RFEM_Python_Client
  • xlwings 库 
  • 编写程序的编辑器

如果您的电脑上已经安装了 RFEM 6、EXCEL 和 Python,那么下一步只需要安装 RFEM_Python_Client 库。 在我们的官网上可以找到有关安装的信息和视频。 在这里我们选择了几个重要的帮助页面和视频, 链接如下:

在这些视频中还介绍了程序编辑器。 对于本示例,可以使用任意编辑器。 最后还需要安装 xlwings,您可以点击以下链接查看相关信息:

例如,完整的代码位于 RFEM_Python_Client 的以下路径中:

  • RFEM_Python_Client/tree/main/Examples/SteelDesign/

SteelDesignExcel.py 文件是 Python 程序(脚本),SteelDesignExcel.xlsm 与 EXCEL 文件关联。

编程示例

xlwings 库提供了多种组合 Python 和 EXCEL 的选项。 一方面,可以从 Python 程序(更好为 Python 脚本)控制 EXCEL,也可以从 EXCEL 启动 Python 脚本。 当从 EXCEL 启动时,可以使用内置的插件,也可以创建一个子程序来启动Python 脚本。 想要了解详细信息,请点击以下链接:

在我们的示例中,Python 脚本是通过内置插件启动的(见图)。 这需要两个必要条件。 Python 脚本必须与 EXCEL 文件同名,并且必须包含一个 main 函数,因为该函数之后会通过插件执行的。
下面是 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"].value # Height of Console
column_height = inputSheet["G10"].value # Height of Column
gable_height = inputSheet["G11"].value # Height of Gable
...


如果从 Python 脚本中直接使用 xlwings(不是通过 EXCEL),则必须先打开一个文件:


            

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


如果在 EXCEL 之外使用 xlwings,则使用以下命令建立连接:


            

wb = xw.Book.caller()


wb 变量包含完整的工作簿,可以使用 sheet() 方法从中提取单个工作表。 在该示例中打开“Inputs”工作表,并且可以通过方括号访问各个单元格。 通过 value 属性可以读取或修改单元格的值, 具体如下:


            

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


在当前情况下读取荷载组合 7。 图 2 显示了在 EXCEL 中的杆件变形,为了便于比较,图 3 中显示了 RFEM 6 的结果。

小结

该示例显示,在设置了所有必要元素后,使用 API 就变得非常容易了。 因为 EXCEL 主要用作图形用户界面,所以不需要 Visual Basic for Applications(VBA)知识。 可以在 EXCEL(也通过 VBA)中进行计算,而 Python 只是借助 xlwings 导入或导出数据。


作者

Günthel 先生为Dlubal 软件客户提供技术支持。

链接