最近有几个人问到了这个问题。
Inventor作为一个设计软件,又有链接Excel表格的功能,我一时没有想起这一个功能有什么作用。把所有的参数都输出到一个Excel表格,有什么特别的用处么?
下面来谈谈具体的实现方法, 这两个方法都不是我自己做出来的。分别感谢这两位的努力。
1、VBA编程法--- Sanjay Ramaswamy
用法就是新建一个空的Excel表格, 然后再VBA 编辑器里面复制下面的代码,然后add a reference to “Microsoft Excel
12.0 Object Library”。 运行即可。
Public Sub ExportParameters()
Err.Clear
Dim
oExcel As Excel.Application
Set
oExcel = GetObject(, "Excel.Application")
If
Err <> 0 Then
MsgBox "Excel must be running"
Exit Sub
End
If
Err.Clear
Dim
oSheet As Excel.WorkSheet
Set
oSheet = oExcel.ActiveSheet
If
Err <> 0 Then
MsgBox "An empty must be active in Excel"
Exit Sub
End
If
Dim
oDoc As Document
Set
oDoc = ThisApplication.ActiveDocument
oSheet.Cells(1, 1).Value = "Name"
oSheet.Cells(1, 2).Value = "Units"
oSheet.Cells(1, 3).Value = "Equation"
oSheet.Cells(1, 4).Value = "Value (cm)"
oSheet.Cells(1, 1).HorizontalAlignment = Excel.xlCenter
oSheet.Cells(1, 2).HorizontalAlignment = Excel.xlCenter
oSheet.Cells(1, 3).HorizontalAlignment = Excel.xlCenter
oSheet.Cells(1, 4).HorizontalAlignment = Excel.xlCenter
oSheet.Cells(1, 1).Font.Bold = True
oSheet.Cells(1, 2).Font.Bold = True
oSheet.Cells(1, 3).Font.Bold = True
oSheet.Cells(1, 4).Font.Bold = True
oSheet.Cells(3, 1).Value = "Model Parameters"
oSheet.Cells(3, 1).Font.Bold = True
Dim
i As Long
i =
4
Dim
oModelParam As ModelParameter
For
Each oModelParam In
oDoc.ComponentDefinition.Parameters.ModelParameters
oSheet.Cells(i, 1).Value = oModelParam.Name
oSheet.Cells(i, 2).Value = oModelParam.Units
oSheet.Cells(i, 3).Value = oModelParam.Expression
oSheet.Cells(i, 4).Value = oModelParam.Value
i = i + 1
Next
i =
i + 1
oSheet.Cells(i, 1).Value = "Reference Parameters"
oSheet.Cells(i, 1).Font.Bold = True
i =
i + 1
Dim
oRefParam As ReferenceParameter
For
Each oRefParam In
oDoc.ComponentDefinition.Parameters.ReferenceParameters
oSheet.Cells(i, 1).Value = oRefParam.Name
oSheet.Cells(i, 2).Value = oRefParam.Units
oSheet.Cells(i, 3).Value = oRefParam.Expression
oSheet.Cells(i, 4).Value = oRefParam.Value
i = i + 1
Next
i =
i + 1
oSheet.Cells(i, 1).Value = "User Parameters"
oSheet.Cells(i, 1).Font.Bold = True
i =
i + 1
Dim
oUserParam As UserParameter
For
Each oUserParam In
oDoc.ComponentDefinition.Parameters.UserParameters
oSheet.Cells(i, 1).Value = oUserParam.Name
oSheet.Cells(i, 2).Value = oUserParam.Units
oSheet.Cells(i, 3).Value = oUserParam.Expression
oSheet.Cells(i, 4).Value = oUserParam.Value
i = i + 1
Next
Dim
oParamTable As ParameterTable
For
Each oParamTable In
oDoc.ComponentDefinition.Parameters.ParameterTables
i = i + 1
oSheet.Cells(i, 1).Value = "Table Parameters - " &
oParamTable.FileName
oSheet.Cells(i, 1).Font.Bold = True
i = i + 1
Dim oTableParam As TableParameter
For Each oTableParam In oParamTable.TableParameters
oSheet.Cells(i, 1).Value = oTableParam.Name
oSheet.Cells(i, 2).Value = oTableParam.Units
oSheet.Cells(i, 3).Value = oTableParam.Expression
oSheet.Cells(i, 4).Value = oTableParam.Value
i = i + 1
Next
Next
Dim
oDerivedParamTable As DerivedParameterTable
For
Each oDerivedParamTable In
oDoc.ComponentDefinition.Parameters.DerivedParameterTables
i = i + 1
oSheet.Cells(i, 1).Value = "Derived Parameters - "
&
oDerivedParamTable.ReferencedDocumentDescriptor.FullDocumentName
oSheet.Cells(i, 1).Font.Bold = True
i = i + 1
Dim oDerivedParam As DerivedParameter
For Each oDerivedParam In
oDerivedParamTable.DerivedParameters
oSheet.Cells(i, 1).Value = oDerivedParam.Name
oSheet.Cells(i, 2).Value = oDerivedParam.Units
oSheet.Cells(i, 3).Value = oDerivedParam.Expression
oSheet.Cells(i, 4).Value = oDerivedParam.Value
i = i + 1
Next
Next
End
Sub
第二个方法--- iLogic方法 , 感谢xiaodong
Liang
用法,新建一个test.xlsx在C盘下面,然后复制下面内容到一个规则里面。运行即可。
'Open Excel
GoExcel.Open("c:\test.xlsx", "Sheet1")
'Title of column
GoExcel.CellValue("c:\test.xlsx", "Sheet1", "A1")
= "Name"
GoExcel.CellValue("c:\test.xlsx", "Sheet1", "B1")
= "Units"
GoExcel.CellValue("c:\test.xlsx", "Sheet1", "C1")
= "Equation"
GoExcel.CellValue("c:\test.xlsx", "Sheet1", "D1")
= "Value (cm)"
'Model Parameters
Dim oCurrentIndex As Long = 3
GoExcel.CellValue("c:\test.xlsx", "Sheet1", "A"
& CStr(oCurrentIndex)) = "Model Parameters"
Dim index As Long
Dim oIndexStr As String
Dim oModelPs
oModelPs =
ThisApplication.Activedocument.ComponentDefinition.Parameters.ModelParameters
For
index = 1 To oModelPs.Count
oIndexStr = "A" &
CStr(oCurrentIndex + index)
GoExcel.CellValue("c:\test.xlsx", "Sheet1",
oIndexStr) = oModelPs(index).Name
oIndexStr = "B" &
CStr(oCurrentIndex + index)
GoExcel.CellValue("c:\test.xlsx", "Sheet1",
oIndexStr) = oModelPs(index).Units
oIndexStr = "C" &
CStr(oCurrentIndex + index)
GoExcel.CellValue("c:\test.xlsx", "Sheet1",
oIndexStr) = oModelPs(index).Expression
oIndexStr = "D" &
CStr(oCurrentIndex + index)
GoExcel.CellValue("c:\test.xlsx", "Sheet1",
oIndexStr) = oModelPs(index).Value
Next
'Reference Parameters
oCurrentIndex = oCurrentIndex + oModelPs.Count + 1
GoExcel.CellValue("c:\test.xlsx", "Sheet1", "A" &
CStr(oCurrentIndex) ) = "Reference Parameters"
Dim oRefPs
oRefPs =
ThisApplication.Activedocument.ComponentDefinition.Parameters.ReferenceParameters
For index = 1 To oRefPs.Count
oIndexStr = "A" &
CStr(oCurrentIndex + index)
GoExcel.CellValue("c:\test.xlsx", "Sheet1",
oIndexStr) = oRefPs(index).Name
oIndexStr = "B"
& CStr(oCurrentIndex +
index)
GoExcel.CellValue("c:\test.xlsx", "Sheet1",
oIndexStr) = oRefPs(index).Units
oIndexStr = "C" &
CStr(oCurrentIndex + index)
GoExcel.CellValue("c:\test.xlsx", "Sheet1",
oIndexStr) = oRefPs(index).Expression
oIndexStr = "D" &
CStr(oCurrentIndex + index)
GoExcel.CellValue("c:\test.xlsx", "Sheet1",
oIndexStr) = oRefPs(index).Value
Next
'User
Parameters
oCurrentIndex = oCurrentIndex + oRefPs.Count +
1
GoExcel.CellValue("c:\test.xlsx", "Sheet1", "A" &
CStr(oCurrentIndex) ) = "User Parameters"
Dim oUserPs
oUserPs =
ThisApplication.Activedocument.ComponentDefinition.Parameters.UserParameters
For index = 1 To oUserPs.Count
oIndexStr = "A" &
CStr(oCurrentIndex + index)
GoExcel.CellValue("c:\test.xlsx", "Sheet1",
oIndexStr) = oUserPs(index).Name
oIndexStr = "B" &
CStr(oCurrentIndex + index)
GoExcel.CellValue("c:\test.xlsx", "Sheet1",
oIndexStr) = oUserPs(index).Units
oIndexStr = "C" &
CStr(oCurrentIndex + index)
GoExcel.CellValue("c:\test.xlsx", "Sheet1",
oIndexStr) = oUserPs(index).Expression
oIndexStr = "D" &
CStr(oCurrentIndex + index)
GoExcel.CellValue("c:\test.xlsx", "Sheet1",
oIndexStr) = oUserPs(index).Value
Next
'ParameterTables
oCurrentIndex = oCurrentIndex +oUserPs.Count +
1
GoExcel.CellValue("c:\test.xlsx", "Sheet1", "A" &
CStr(oCurrentIndex) ) = "Parameter Table"
Dim oPTables
oPTables =
ThisApplication.Activedocument.ComponentDefinition.Parameters.ParameterTables
For i = 1 To
oPTables.Count
Dim oEachPTable
oEachPTable =
oPTables(i)
Dim oPTableParas
oPTableParas =
oEachPTable.TableParameters
oCurrentIndex = oCurrentIndex
+ 1
GoExcel.CellValue("c:\test.xlsx", "Sheet1", "A" &
CStr(oCurrentIndex) ) = "Table Parameters - " &
oEachPTable.FileName
For index =
1 To oPTableParas.Count
Dim oEachP
oEachP = oPTableParas(index)
oIndexStr = "A" & CStr(index +
oCurrentIndex)
GoExcel.CellValue("c:\test.xlsx", "Sheet1", oIndexStr) =
oEachP.Name
oIndexStr = "B" & CStr(index
+oCurrentIndex)
GoExcel.CellValue("c:\test.xlsx", "Sheet1", oIndexStr) =
oEachP.Units
oIndexStr = "C" & CStr(index
+oCurrentIndex)
GoExcel.CellValue("c:\test.xlsx", "Sheet1", oIndexStr) =
oEachP.Expression
oIndexStr = "D" & CStr(index +
oCurrentIndex)
GoExcel.CellValue("c:\test.xlsx", "Sheet1", oIndexStr) =
oEachP.Value
Next
oCurrentIndex = oCurrentIndex
+ oPTableParas.Count
Next
'Derived Parameter Table
oCurrentIndex = oCurrentIndex + 1
GoExcel.CellValue("c:\test.xlsx", "Sheet1", "A" &
CStr(oCurrentIndex) ) = "Derived Parameter Table"
Dim oDTables
oDTables =
ThisApplication.Activedocument.ComponentDefinition.Parameters.DerivedParameterTables
For i = 1 To
oDTables.Count
Dim oEachDTable
oEachDTable =
oDTables(i)
Dim oDTableParas
oDTableParas =
oEachDTable.DerivedParameters
oCurrentIndex = oCurrentIndex
+ 1
GoExcel.CellValue("c:\test.xlsx", "Sheet1", "A" &
CStr(oCurrentIndex) ) = "Table Parameters - " &
oEachDTable.ReferencedDocumentDescriptor.FullDocumentName
For index =
1 To oDTableParas.Count
Dim oEachDP
oEachDP = oDTableParas(index)
oIndexStr = "A" & CStr(index +
oCurrentIndex)
GoExcel.CellValue("c:\test.xlsx", "Sheet1", oIndexStr) =
oEachDP.Name
oIndexStr = "B" & CStr(index
+oCurrentIndex)
GoExcel.CellValue("c:\test.xlsx", "Sheet1", oIndexStr) =
oEachDP.Units
oIndexStr = "C" & CStr(index
+oCurrentIndex)
GoExcel.CellValue("c:\test.xlsx", "Sheet1", oIndexStr) =
oEachDP.Expression
oIndexStr = "D" & CStr(index +
oCurrentIndex)
GoExcel.CellValue("c:\test.xlsx", "Sheet1", oIndexStr) =
oEachDP.Value
Next
oCurrentIndex = oCurrentIndex + oDTableParas.Count
Next
GoExcel.Save
GoExcel.Close
加载中,请稍候......