logo资料库

AutoCAD属性块与EXCEL表格的双向存取.pdf

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
2 2 2  2003 年第 7 期 文章编号 :1006 计  算  机  与  现  代  化 J ISUANJ I YU XIANDAIHUA    总第 95 期 02 2475 (2003) 07 0084 AutoCAD 属性块与 Excel 电子表格的双向存取 张小红1 ,吴伟晖2 (1. 南方冶金学院 ,江西 赣州  341000 ;2. 江西省公安厅 ,江西 南昌  330006) 摘要 : 通过编写 Visual Basic 及 VBA 的代码 ,完整地实现了 AutoCAD 属性块与 Excel 电子表格的双向存取 ,并提供全部程 序代码注释及运行步骤 。 关键词 : AutoCAD 属性块 ; Excel 电子表格 ; 双向存取 ; VBA ; 宏 中图分类号 : TP311. 52    文献标识码 : A Double Access on AutoCAD Piece and Excel Electronic Form ZHANG Xiao hong1 ,WU Wei hui2 (1. Southern Institute of Metallurgy , Ganzhou  341000 ,China ; 2. Jiangxi Province Public Security Official Hall ,Nanchang 330006 ,China) Abstract :Writes Visual Basic and VBA codes ,completely realizes double access on AutoCAD piece and Excel electronic form ,and pro vides all code remarks and running steps. Keywords :AutoCAD property piece ; Excel electronic form ;double access ;VBA ;macro 0  引  言 由于 CAD 软件技术迅猛发展 ,它所支持的应用范 畴越来越广 ,众多企业为维持竞争力和分析追踪设计 产品制造所需的大量资料和信息 ,纷纷将需求指向图 纸与数据上的结合。在当今的办公室里 ,许多人员对 Word 字处理软件和 Excel 电子表格软件都已充分熟 悉 ,将 AutoCAD 属性数据资料转入熟悉的 Excel 电子表 格中 ,反过来将 Excel 中处理过的数据绘制回到 Auto CAD 图形文件中 ,是工程人员急切想掌握的技术 ,本文 提供的 AutoCAD 属性块与 Excel 电子表格的双向存取 程序均在 Visual Basic 6. 0、AutoCAD 2000 中调试成功。 1  将 AutoCAD 属性存入 Excel 电子表格   假设我们有一个 AutoCAD 图纸文件 :结晶器振动 装置. dwg ,希望将它的属性块中的内容 (如图 1 所示) 全部转入到 Excel 电子表格 :“属性导出. xls”文件中 。 操作步骤 : (1) 新建一个 Excel 电子表格文件 ,取名为 :属性导出. xls ; (2) 打开需要导出的 AutoCAD 文件 :结晶器振动装置. dwg ; (3) 单击“工具”菜单 ,选择“宏”→“Visual Basic 编辑器”, 添加以下代码 : 图 1  结晶器振动装置. dwg 文件中的属性块内容 Public acad As Object Public mspace As Object Public excel As Object Public AcadRunning As Integer Public excelSheet As Object Sub obtain() Dim elem As Object Dim RowNum As Integer Dim Array1 As Variant ,Array2 As Variant Dim Count As Integer Set excel = GetObject ( ,″Excel. Application″)‘打开一个 Excel 电子表格文件 ,如 :属性导入. xls Worksheets (″sheet1″) . Activate ‘激活 sheet1 表单   收稿日期 :2003   作者简介 :张小红 (1966 04 16 ) ,女 ,河北秦皇岛人 ,南方冶金学院副教授 ,北京科技大学博士研究生 ,研究方向 :计算机应用 。 © 1994-2009 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net
2003 年第 7 期    张小红等 :AutoCAD 属性块与 Excel 电子表格的双向存取 58 Set excelSheet = excel. ActiveWorkbook. Sheets(″sheet1″) Set acad = GetObject ( ,″AutoCAD. Application″)‘打 开 一 个 AutoCAD 文件 ,如 :结晶器振动装置. dwg Set doc = acad. ActiveDocument‘doc 变量指向 AutoCAD 目前 文件 Set mspace = doc. ModelSpace‘mspace 变量指向 AutoCAD 目 前文件模型空间 RowNum = 1 Dim Header As Boolean Header = False‘Header 将标记是否读出 Excel 标题栏 For Each elem In mspace With elem If StrComp (. EntityName ,″AcDbBlockReference″,1) = 0 Then If . HasAttributes Then Array1 = . GetAttributes‘Array1 表示属性数组 Array2 = . GetConstantAttributes‘Array2 表示常数属性数组 For Count = LBound(Array1) To UBound(Array1) If Header = False Then‘将 Array1 的标签文字 tagstring 作为 Excel 的标题 If StrComp (Array1 (Count) . EntityName ,″AcDbAttribute″,1) = 0 Then excelSheet. Cells ( RowNum , Count + 1 ) . Value = Array1 (Count) . TagString End If End If Next Count For Count = LBound(Array2) To UBound(Array2) If Header = False Then‘将 Array2 的标签文字 tagstring 作为 Excel 的标题 If StrComp ( Array2 ( Count ) . EntityName ,″AcDbAttribut eDefinition″,1) = 0 Then excelSheet. Cells(RowNum ,UBound(Array1) + 1 + Count + 1) . Value = Array2(Count) . TagString End If End If Next Count RowNum = RowNum + 1‘Excel 的行号加 1 For Count = LBound(Array1) To UBound(Array1) excelSheet. Cells ( RowNum , Count + 1 ) . Value = Array1 (Count) . TextString Next Count For Count = LBound(Array2) To UBound(Array2) excelSheet. Cells(RowNum ,UBound(Array1) + 1 + Count + 1) . Value = Array2(Count) . TextString‘将 Array1 和 Array2 的标签 属性读出 ,存入 Excel 中 Next Count Header = True‘结束读取标题栏 End If End If End With Next elem Set acad = Nothing End Sub (4) 单击“工具”菜单 ,选择“宏”→“宏. . . ”,在弹出的对 话框中 ,单击“执行”。图 1 中的属性块内容就完整地导入在 Excel 表格中 。 (5) 若上述. dwg 的属性块中的内容进行过修改 ,可重新 打开属性导出. xls ,并在打开文件的提示框中回答“启用宏”, 直接运行步骤 (4) 即可 。 2  Excel 电子表格中数据导入 Auto CAD 属性块   现在我们要做一个逆向工作 ,将修改整理过的 Excel 电子表格中数据完整导入 AutoCAD 属性块 ,这 项工作量相对而言难度更大 ,但对于工程人员实用性 更强 ,操作步骤如下 : (1) 先在 AutoCAD 中制作好两个. dwg 块文件 :imptitle. dwg 和 impline. dwg ,前者为绘出属性表表头 ,后者为分别绘制线 条 ,注意各字段的宽度要一致 ,如图 2、图 3 所示 。 图 3  impline. dwg 线条 (2) 打开一个已编辑好的 Excel 电子表格文件 。 (3) 打开一个欲嵌入 Excel 数据值的 AutoCAD 文件 ,单击 “工具”菜单 ,选择“宏”→“Visual Basic 编辑器”,添加以下代 码 : Public acad As Object Public mspace As Object Public excel As Object Public AcadRunning As Integer Public excelSheet As Object Sub import () Dim shapes As Object Dim RowNum As Integer Dim Array1 As Variant ,Array2 As Variant Dim Count As Integer excel. Worksheets(″sheet1″) . Activate Set excelSheet = excel. ActiveWorkbook. Sheets(″sheet1″) Set acad = GetObject ( ,″AutoCAD. Application″) Dim insertpt Dim ipt (0 To 2) As Double ,nipt (0 To 2) As Double Dim blkref As AcadBlockReference Dim imptitle As String ,impline As String Dim atr As Variant ,catr As Variant Dim i As Integer imptitle = ″D : \ imptitle. dwg″ impline =″D : \ impline. dwg″ insertpt = ThisDrawing. Utility. GetPoint( ,″请点击属性块内容 的插入位置 :″) (下转第 88 页) © 1994-2009 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net
3 3  其他 U dw 和 DataWindow 服务 DataWindow 是 PowerBuilder 产品最强大的特征之 一 ,DataWindow 用户对象和 DataWindow 服务自然也 就成了 PFC 功能的核心内容 。除了上面详细介绍的 Dropdown Search (下拉搜索) , PFC 还为 DataWindow 提 供了一些其他服务 (详情见 PowerBuilder 光盘 Online Book) ,这些功能也是常用的 。现摘列在文章的最后 , 读者可以模仿上例把其中有用的对象从 PFC 中分离 出来 ,加入自己的框架包 。 4  结束语 本文通过一个实例简单介绍了怎样抽取 PFC 的 DataWindow 服务来构建自己的开发框架包的方法 (其 他有关 PFC 的内容请参考 PowerBuilder Online Book) 。 掌握了这些技术 ,剩下的具体实现比较简单 ,不再赘 述 。需要说明的是 ,在具体的领域中 ,应结合本领域 的特点构建相应的开发包 ,以提高软件开发的效率和 质量 。本文是作者根据多年的开发经历做出的经验 总结 ,所介绍的技术在《上海关西 MRPII 系统》和《中 远大连船厂 MIS 系统》中应用 ,并取得了良好的效果 。 参考文献 : 1  Simon Gallagher ,Simon Herbert. PowerBuilder 6. 0 程序设计 大全 M . 北京 :机械工业出版社 ,1998. 2  刘红岩. PowerBuilder 高级开发技术 M . 北京 :电子工 (上接第 85 页)   Set blkref = ThisDrawing. ModelSpace. InsertBlock(insertpt ,imp title ,1 ,1 ,1 ,0)‘插入标题图块 0. 4 :ipt (2) = 0 7 :ipt (1) = insertpt (1) ipt (0) = insertpt (0) ‘计算下一个插入点位置 RowNum = 2 Count = 1 While excelSheet. Cells(RowNum ,1) . Value < > Empty Set blkref = ThisDrawing. ModelSpace. InsertBlock(ipt ,impline , 1 ,1 ,1 ,0) 0. 25 :ipt (2) = 0 ipt (0) = ipt (0) :ipt (1) = ipt (1) ‘插入表格行 ,并计算下一个插入点位置 With blkref atr = . GetAttributes For i = 0 To 3 atr (i) . TextString = excelSheet. Cells(RowNum ,i + 1) Next End With RowNum = RowNum + 1‘对应的标签内容读出 ,并将 Excel 的指针向下移一行 Wend Set acad = Nothing End Sub (4) 以 AutoCAD VBA 源代码 88 计  算  机  与  现  代  化 2003 年第 7 期 业出版社 ,2000. 表 1  PFC 为 DataWindow提供的常用服务 Filter (过滤服务) Find (查找服务) Linkage ( 链 接 服 务) Multitable Update (多表更新服务) Property ( 属 性 服 务) Print Preview (打印 预览服务) QueryMode (查询模 式服务) Reporting ( 报 表 服 务) ReqColumn ( 必 须 列服务) Resize ( 数 据 窗 口 尺寸调整服务) Row Management (行管理服务) Row Selection(行选 择服务) Sort (排序服务) u calculator (计算 器) u calendar (日历) 为 DataWindow 加入过滤器 ,提供三种方式过 滤 DataWindow 数据。 为 DataWindow 中数据提供一种易于使用查找 和替换的方法。 提供一种在 DataWindow 之间建立联系的方 法 ,典型用于主控 处理一个 DataWindow 对象内两个或多个表的 更新。 详细结构。 该对象用来控制 DataWindow 属性窗口。 提供功能性的打印预览功能 (如下页 ,上页 , 缩放等) 。 提供对特定查询实现 Query 模式的能力 ,提供 保存和调入查询条件功能。 提供增强的报表特征 (如添加项目、缩放、改 变字体、颜色等) 和打印功能。 提供为必须列启用或者禁止默认数据窗口进 程 ,使得用户应用程序处理相互依赖的列时 更方便。 当调整 DataWindow 的大小时调整 DataWindow 对象 (包含列 ,计算列、位图和文本) 的大小。 提供普通的在 DataWindow 最后插入空行、两 列之间加空白列、删除一到多列和恢复最后 一次删除的服务。 使用户具有单选、多选和扩展选择的能力。 提供四种不同的风格对 DataWindow 数据进行 排序。 生成一个下拉计算器用于计算 DataWindow 内 某个栏的值。 生成一个下拉日历用于在 DataWindow 的日期 栏内方便地选择日期。 行 ,当 AutoCAD 图形命令窗口出现提示 :“请点击属性块内容 的插入位置 :”时 ,在欲插入属性块位置单击鼠标 ,则 Excel 表 格中的内容全部整齐地嵌入在 AutoCAD 图形窗口中 。 (5) 若今后想在别的. dwg 文件中进行同样属性块的内容 导入 ,可免去步骤 (1) ,重复步骤 (2) ,打开一个欲嵌入 Excel 数 据值的 AutoCAD 文件 ,单击“工具”菜单 ,选择“宏”→“加载工 程 …”,添加步骤 (4) 中保存的. dvb 文件 ,再点击“宏”→“宏 …” 中的“运行”即可 。 3  结束语 以上程序使用了 AutoCAD 中的 VBA 及 Excel 中 的 VBA 程序设计 ,代码经过严格的调试通过 ,因为具 有相当的通用性 ,所以使用方便 ,易读性强 。也可将 此代码改编成一段 VB 小程序 ,直接在应用程序中调 用运行 ,性能稳定 。 参考文献 : 1  [美 E Winemiller ,J Roff ,B Heyman ,R Groom. Visual Basic 6. 0 数据库开发 M . 北京 :清华大学出版社 ,1999. 2  二代龙震工作室. AutoCAD&数据库整合运用实作 M . 北京 :电子工业出版社 ,2002. 3  六木工作室. Visual Basic 6. 0 中文版实用编程技巧 M . . dvb 格式保存代码并运 北京 :人民邮电出版社 ,1999. © 1994-2009 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net
分享到:
收藏