新浪博客

在CATIA中利用VBA读取EXCEL中的数据

2012-06-06 16:45阅读:

本程序可以把EXCEL表格中按一定格式存储的点、线、面等数据读取到CATIA并创建相应的对象

http://blog.163.com/nuaa_wjz/blog/static/228734772008128111049315/
'点数据是基本数据,线由点组成,面又由线组成,因此只有填写了点数据后才能添加线数据,
'面与线类似。本程序中默认的扩展数据为关键点处的内力数据,其ID应该与点数据的ID一致。
'下表中具体含义:ID—数据编号,(X,Y,Z)—点数据坐标值,(P1,P2)—组成线的点ID,
'(L1,L2)—组成面的线ID,(M,N,Q)—关键点处弯矩、轴力、剪力的数值。
'程序界面如下:

在CATIA中利用VBA读取EXCEL中的数据

'注意:表格中的数据区可以为空,每一类数据中只要有一行中出现空值,即认为该
' 类数据结束,其后的数据不再读取。本程序启动一次读入一张表格后,其点、线、面
' 数据不应该被改变。但其内力(M,N,Q)的数值允许改变,保存表格后,可以选择更
' 新内力图(如果程序窗口已经关闭,重新启动后不要选中“创建点”后重新打开文件)
' 但一定要保证CATIA中该表格数据所在的几何图形集名称与表格对应,通常默认即可。
' 如果数据表中的点、线、面数据有变,即认为这是一张新的数据表,应该换一个新的文
' 件名并作为新的数据表重新导入,若不改名则请确保当前PART根结点下没有与其文件名
' 相同的几何图形集(此处几何图形集的命名方式为:DATA FORM EXCEL - 文件名)。
' 另外,内力关键点必须在同一平面内,且不在同一直线上。
'默认的EXCLE表格中数据格式如下:
在CATIA中利用VBA读取EXCEL中的数据
'表格可以扩展,具体格式也可能改变,此时须改变下列常数的值,以保证与表格中的一致
'程序中使用的有关常数定义:
Const Data_Start_Row = 3
Const Point_ID_Col = 1
Const Point_X_Col = 2
Const Point_Y_Col = 3
Const Point_Z_Col = 4

Const Line_ID_Col = 6
Const Line_Point1_Col = 7
Const Line_Point2_Col = 8

Const Mesh_ID_Col = 10
Const Mesh_Line1_Col = 11
Const Mesh_Line2_Col = 12

Const Force_ID_Col = 14
Const Force_M_Col = 15
Const Force_N_Col = 16
Const Force_Q_Col = 17

Dim EXCEL As Object

'*************************************
Private Sub CreatePoint_CheckBox_Change()
CreateLine_CheckBox.Value = CreatePoint_CheckBox.Value
CreateLine_CheckBox.Enabled = CreatePoint_CheckBox.Value
End Sub

Private Sub CreateLine_CheckBox_Change()
CreateMesh_CheckBox.Value = CreateLine_CheckBox.Value
CreateMesh_CheckBox.Enabled = CreateLine_CheckBox.Value
End Sub


Private Sub ChooseFile_CommandButton_Click()

On Error GoTo error_1
Set EXCEL = CreateObject('EXCEL.Application', '')
Dim DataFileName As String
DataFileName = EXCEL.GetOpenFilename('EXCEL Files (*.xls), *.xls')

If DataFileName <> 'False' Then
EXCEL.workbooks.Open DataFileName
MainForm_UserForm.ChooseFile_CommandButton.Caption = DataFileName

If CreatePoint_CheckBox.Value = True Then
Dim Cur_hybridBody As HybridBody
Set Cur_hybridBody = Set_Cur_HybridBody()
CreatePoint Cur_hybridBody
If CreateLine_CheckBox.Value = True Then
CreateLine Cur_hybridBody
If CreateMesh_CheckBox.Value = True Then
CreateMesh Cur_hybridBody
End If
End If
MainForm_UserForm.CreateForce_M_CommandButton.Enabled = True
MainForm_UserForm.CreateForce_N_CommandButton.Enabled = True
MainForm_UserForm.CreateForce_Q_CommandButton.Enabled = True

End If
End If

Exit Sub
error_1:
EXCEL.Quit
End Sub


Private Function Set_Cur_HybridBody() As HybridBody

On Error GoTo error_1
Dim partDocument1 As PartDocument
Set partDocument1 = CATIA.ActiveDocument

Dim part1 As Part
Set part1 = partDocument1.Part

Dim hybridShapeFactory1 As HybridShapeFactory
Set hybridShapeFactory1 = part1.HybridShapeFactory

Dim hybridBodies1 As HybridBodies
Set hybridBodies1 = part1.HybridBodies

Dim hybridBody1 As HybridBody
Dim temp_name As String
temp_name = MainForm_UserForm.ChooseFile_CommandButton.Caption
temp_name = StrConv(Mid(temp_name, InStrRev(temp_name, '') + 1), 1)
k = 0
For N = 1 To hybridBodies1.Count
Set hybridBody1 = hybridBodies1.Item(N)
If (Left(hybridBody1.Name, Len('DATA FROM EXCEL - ' + temp_name)) = 'DATA FROM EXCEL - ' + temp_name) Then
k = k + 1
End If
Next N
If k > 0 Then
'MsgBox 'have same data file!'
hybridBody1.Name = 'DATA FROM EXCEL - ' + temp_name + '(' + CStr(k) + ')'
End If
Set hybridBody1 = hybridBodies1.Add()
hybridBody1.Name = 'DATA FROM EXCEL - ' + temp_name

Set Set_Cur_HybridBody = hybridBody1
'Max = 1
'For n = 1 To hybridBodies1.Count
' Set hybridBody1 = hybridBodies1.Item(n)
' If (Left(hybridBody1.Name, InStrRev(hybridBody1.Name, '.')) = 'DATA FROM EXCEL.') Then
' m = CInt(Mid(hybridBody1.Name, InStrRev(hybridBody1.Name, '.') + 1))
' If m >= Max Then
' Max = m + 1
' End If
' End If
'Next n
Exit Function
error_1:
EXCEL.Quit
End Function

Private Sub CreatePoint(Cur_hybridBody As HybridBody)
'On Error GoTo error_1
Dim partDocument1 As PartDocument
Set partDocument1 = CATIA.ActiveDocument

Dim part1 As Part
Set part1 = partDocument1.Part

Dim hybridShapeFactory1 As HybridShapeFactory
Set hybridShapeFactory1 = part1.HybridShapeFactory

Dim hybridBodies1 As HybridBodies
Set hybridBodies1 = part1.HybridBodies

Dim hybridBody1 As HybridBody
Set hybridBody1 = Cur_hybridBody.HybridBodies.Add()
hybridBody1.Name = 'POINT DATA'

Dim i As Integer
Dim ID As String
Dim X As String
Dim Y As String
Dim Z As String
Dim hybridShapePointCoord1 As HybridShapePointCoord

For i = Data_Start_Row To 1000
ID = EXCEL.cells(i, Point_ID_Col).Value
X = EXCEL.cells(i, Point_X_Col).Value
Y = EXCEL.cells(i, Point_Y_Col).Value
Z = EXCEL.cells(i, Point_Z_Col).Value

If (ID = '' Or X = '' Or Y = '' Or Z = '') Then
Exit For
End If

'Dim hybridShapePointCoord1 As HybridShapePointCoord
Set hybridShapePointCoord1 = hybridShapeFactory1.AddNewPointCoord(X, Y, Z)

hybridBody1.AppendHybridShape hybridShapePointCoord1

hybridShapePointCoord1.Name = 'POINT.' + ID

Next i
part1.Update
Exit Sub
error_1:
EXCEL.Quit
End Sub

Private Sub CreateLine(Cur_hybridBody As HybridBody)
'On Error GoTo error_1
Dim partDocument1 As PartDocument
Set partDocument1 = CATIA.ActiveDocument

Dim part1 As Part
Set part1 = partDocument1.Part

Dim hybridShapeFactory1 As HybridShapeFactory
Set hybridShapeFactory1 = part1.HybridShapeFactory

Dim hybridBodies1 As HybridBodies
Set hybridBodies1 = part1.HybridBodies

Dim hybridBody1 As HybridBody
Set hybridBody1 = Cur_hybridBody.HybridBodies.Add()
hybridBody1.Name = 'LINE DATA'

Dim hybridShapes1 As HybridShapes
Set hybridShapes1 = Cur_hybridBody.HybridBodies.Item('POINT DATA').HybridShapes

Dim i As Integer
Dim ID As String
Dim P1 As String
Dim P2 As String

Dim hybridShapePointCoord1 As HybridShapePointCoord
Dim reference1 As Reference
Dim hybridShapePointCoord2 As HybridShapePointCoord

我的更多文章

下载客户端阅读体验更佳

APP专享