APDL如何读取EXCEL文件?

文摘   2024-07-30 08:01   重庆  

欢迎阅读水哥原创文章,历年原创文章请点击:

本公众号历年原创文章汇总-2024.05

更多水哥原创课程,请点击:

水哥原创课程清单


APDL中,我们常用*Vread命令读取数据文件,使用该命令时,后续要紧跟数据读取的格式,随着数据内容的不同,格式可能也不一样,这导致命令的可移植性较差,同时对数据文件的生成要求也比较多,通常需要用matlab或者Python重新清理格式。

本文介绍APDL读取EXCEL文件的方法,由于EXCEL编辑性较强,且采用本文方法对数据格式无要求,从某种程度来讲,可让大家摆脱对格式的烦恼!

读取EXCEL的主要命令为*TREAD,该命令的主要作用是从外部文件读取数据并转为一个Table数据,注意不是普通的Array,大家可理解为转为一个表格数组,而不是我们常见的数值数组。

其帮助如下:

该命令只需要四个参数,表格数组的名称,读取数据的名称、后缀名,以及开始读取时忽略的行数。

下面以这样一个文件来演示基本操作方法。

已知有一个excel文件,名为myplot.xls, 其内容如下所示,总计三列,分别为Time,X,Y, 共约300行,具体行数不详,现在需要将数据读入APDL中以方便加载。

第一步,首先将EXCEL文件另存为CSV文件,这里同学们可能会问为什么要这么做,主要原因在于EXCEL为二进制文件,主要运用于Office或者WPS,而CSV则为纯文本文件,适用于任何文本软件。

第二步,定义一个Table数组,定义之前,首先要知道数据的维度,这里如果用户不想手动去查看数据的维度,可以采用/INQUIRE这个命令来查询文件数据的行数.

代码如下:

/INQUIRE,NumL,Lines,myplot,csv

运行上述命令后,查看变量NumL的值,并与原数据进行对比,吻合!

定义数组:

*DIM,mytable,Table,NumL-1,2,1

这里说下数组维度的确认方法,由于第一行数据为标识符,也即Time,X,Y,故要在总行数的基础上减去1;另外,在读取数据存为table时,默认数据的第一行为Column的索引值,第一列为Row的索引值,且两者都需要升序,我们实际上只需要XY的数据,故而存储数据的列数为2,同时还需要手动增加一行索引值(随便定义,保证升序即可),故而csv的数据需要做如下修改。

第三步,读取CSV文件内容

代码如下:

*Tread,mytable,myplot,csv,,1

这里的1表示第一行不读取,直接从第二行开始读取,读取成功后,打开table的数据显示,如下所示:

从这里可见,数据已被完整的读取进来。

为测试数据格式问题,我们这里新增加一列,并用科学计数法表示,如下所示:

修改后的命令流如下所示:

/INQUIRE,NumL,Lines,myplot,csv

*DIM,mytable,Table,NumL-1,3,1

*Tread,mytable,myplot,csv,,1


从图中可见,虽然源数据格式不同,但依然能被读取,简单快捷!

本文未经授权,禁止复制转载于其他第三方平台!

四、数据引用

虽然上述操作将数据读取了,但由于是表数组,其引用是直接根据索引值来插值计算,而不是简单的通过行数、列数值来引用,非常不方便,所以我们还需要将其转为普通数组方便我们平时的操作。

这里就需要另外一个APDL命令,*VFUN,该命令的作用为变量运算,其中有一个copy,非常适合我们这里的操作。

命令流如下,注意表数组不能从0开始,否则索引值会被写进去:

*dim,myarray,array,NUML,3

*Vfun,myarray(1,1),copy,mytable(1,1)

*Vfun,myarray(1,2),copy,mytable(1,2)

*Vfun,myarray(1,3),copy,mytable(1,3)

通过上述操作,我们就将一个表数组转为了数值型数组,从而可通过元素的行列数来具体调用。

如进行变量的赋值,并与原数据进行比对:

aa=myarray(5,2)

*status,aa

通过上述操作,即可完美实现从EXCEL数据到APDL,并且再也不用担心格式问题了,稳!


全篇的命令如下:

/INQUIRE,NumL,Lines,myplot,csv*DIM,mytable,Table,NumL-1,3,1*Tread,mytable,myplot,csv,,1*dim,myarray,array,NUML,3*Vfun,myarray(1,1),copy,mytable(1,1)*Vfun,myarray(1,2),copy,mytable(1,2)*Vfun,myarray(1,3),copy,mytable(1,3)aa=myarray(5,2)*status,aa

另外附上采用table数据来进行的绘图:

*vplot,mytable(1,1),mytable(1,2)

如果觉得这个实用,欢迎转载,分享!

更多水哥原创课程,请点击:

       水哥原创课程清单

更多有限元学习资源,请访问水哥博客:FSCAE.COM

祝好

ANSYS结构院

2024.07.29

ANSYS结构院
ANSYS使用心得及操作技巧,B站Up主水哥ANSYS, 有限元学习资源分享,公众号官网FSCAE.COM
 最新文章