关于VB和VBA开发CAD的一些知识(五)
编者:尹凡(efan2000) 时间:2003年5月
15、Excel文件的操作
Excel应用程序对象(Application)提供了对Excel应用程序控制的接口。它包括工作簿对象(Workbook对象),代表当前打开的一个Excel文件(文档)。而一个工作簿又包含了一些工作表对象(Worksheet对象),代表工作簿中的一张工作表。Cell代表工作表中的一个单元格,而Range是由一个或者多个单元格构成的区域。
在 Excel 电子表格中列出 AutoCAD 属性
以下子例程在当前图形中查找所有的块引用,然后查找附着到这些块引用的属性,并将它们列在 Excel 电子表格中。要运行本样例,请按以下步骤执行:
1. 打开包含块引用的图形,这些块引用带有属性。(样例图形 sample/activeX/attrib.dwg 包含这样的块引用。)
2. 使用 AutoCAD VBAIDE 命令打开 VBA IDE。
3. 使用 VBA IDE 中的“工具” “引用”菜单选项,选择 Microsoft Excel 8.0 对象模型。
4. 将这个子例程复制到 VBA 的“代码”窗口中并运行它。
![](source/plugin/imc_colorcode/images/loading.gif)
- [FONT=courier new]
- Sub Ch12_Extract()
- Dim Excel As Excel.Application
- Dim ExcelSheet As Object
- Dim ExcelWorkbook As Object
-
- Dim RowNum As Integer
- Dim Header As Boolean
- Dim elem As AcadEntity
- Dim Array1 As Variant
- Dim Count As Integer
-
- ' 启动 Excel。
- Set Excel = New Excel.Application
-
- ' 创建新的工作簿并查找活动电子表格。
- Set ExcelWorkbook = Excel.Workbooks.Add
- Set ExcelSheet = Excel.ActiveSheet
- ExcelWorkbook.SaveAs "Attribute.xls"
-
- RowNum = 1
- Header = False
- ' 遍历模型空间,查找
- ' 所有的块引用。
- For Each elem In ThisDrawing.ModelSpace
- With elem
- ' 找到块引用时,
- ' 检查其属性
- If StrComp(.EntityName, "AcDbBlockReference", 1) _
- = 0 Then
- If .HasAttributes Then
- ' 获取属性
- Array1 = .GetAttributes
- ' 将属性的标记字符串
- ' 复制到 Excel
- For Count = LBound(Array1) To UBound(Array1)
- If Header = False Then
- If StrComp(Array1(Count).EntityName, _
- "AcDbAttribute", 1) = 0 Then
- ExcelSheet.Cells(RowNum, _
- Count + 1).value = _
- Array1(Count).TagString
- End If
- End If
- Next Count
- RowNum = RowNum + 1
- For Count = LBound(Array1) To UBound(Array1)
- ExcelSheet.Cells(RowNum, Count + 1).value _
- = Array1(Count).textString
- Next Count
- Header = True
- End If
- End If
- End With
- Next elem
- Excel.Application.Quit
- End Sub
- [/FONT]
16、使用ADO操作Access数据库
ADO的Connection对象提供了连接数据库的方法,也可以看做是对数据库进行控制的接口。它主要包括数据集对象(Recordset对象),代表返回数据库中的数据记录,还有命令对象(Command对象),执行一些SQL语句。
Connection对象的Provider属性是提供者的名称,ConnectionString属性是建立到数据源的连接的信息。Open方法是打开到数据源的连接,Execute方法是执行指定的SQL语句。
Recordset对象的Open方法是返回表的记录或者执行SQL语句查询等的结果。
Command对象的Execute方法是执行SQL语句,如插入、更新、删除记录等。
![](source/plugin/imc_colorcode/images/loading.gif)
- [FONT=courier new]
- 示例:
- Public Sub Example_ADO()
- Dim cnn As ADODB.Connection
- Set cnn = New ADODB.Connection
- ' 打开连接
- ' 1、在连接字符串外指定提供者
- ' cnn.Provider = "Microsoft.Jet.OLEDB.3.51"
- ' strCnn = "Data Source=c:\MyDb.mdb;"
- ' cnn.Open strCnn
- ' 2、在Open语句外指定连接字符串
- ' cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=c:\MyDb.mdb;"
- ' cnn.Open
- strCnn = "Provider=Microsoft.Jet.OLEDB.3.51;" & _
- "Data Source= c:\MyDb.mdb;"
- cnn.Open strCnn
- Dim rst As ADODB.Recordset
- Set rst = New ADODB.Recordset
- ' 打开表
- rst.CursorType = adOpenKeyset
- rst.LockType = adLockOptimistic
- rst.Open "employee", cnn, , , adCmdTable
- ' 执行SQL语句
- Dim cmd As ADODB.Command
- Set cmd = New ADODB.Command
- Set cmd.ActiveConnection = cnn
- cmd.CommandText = "UPDATE Titles SET Type ='self_help' WHERE Type = 'psychology'"
-
-
- rst.Close
- cnn.Close
- End Sub
- [/FONT]
|