VBA自动提取CAD图纸明细表及数据库管理的研究与实践(一)发表时间:2009-12-3011:00:52评论(4)浏览(2226)评论|加入收藏摘要:笔者认为:在企业信息化建设中,依靠软件商开发和购买大型管理软件是必要的,但不是唯一的。信息系统的开发和应用切忌一味搞“大而全”、“高版本”,而应针对应用的具体对象灵活的采取不同的开发方式。需要强调的是:充分地调动和挖掘本企业信息技术人员的积极性和创造性,有效地组织他们去攻克解决企业信息化道路上的难题和开发实用型专业化软件工具显得尤其重要,这才是企业信息化建设的真正动力和技术支撑。遗憾的是这个问题也正是当前许多企业在信息技术开发工作中的不足之处。一切管理软件都是工具,工具不是万能的,关键还是人的创新精神和责任心。因此能否真正发挥软件的作用解决企业的实际问题,还有待于依靠企业领导、管理人员、信息技术人员的同心协力,鼎力相助。这种信息系统开发的模式也是企业特别是中小型企业信息化建设的一条可借鉴的有效途径。正文:制造企业工程技术人员在利用CAD进行产品设计时产生大量的DWG文件,每一个DWG文件中包含一张或数张图纸,设计的基础资料如:工程项目、图号、设备(物料)名称、型号规格、材质、数量、重量、备注等等文本信息都记录在图纸标题栏明细表中。设计工作完成后,工艺编制、成本预算、物料消耗、物流采购、计划调度、车间生产等项管理业务都将依据图纸进行操作。在通常的管理中,各业务部门往往通过人工的方式从CAD图纸或纸质图纸明细表中获取技术文件数据,再利用WORD或EXCEL进行手工二次录入,编制各自需要的明细表、经过汇总,生成相应的报表,并在此基础上产生工艺技术文件通俗简称为(工单),按不同的用途也有的称之为物料消耗单、物料清单BOM等。这种单页面的文本制作方式虽然使用了电脑操作,但并未能摆脱繁重的手工录入和编辑工作,不能进行数据的自动处理,存在图纸与制表数据不一致、差错率高、工作量大、编制周期长、效率低下、查询繁琐、数据不能共享等多种弊端。因此,采用自动提取CAD明细表与进行数据库管理的方法是克服以上弊端提高企业设计、技术、管理效率和工作质量的有效途径。AutoCAD是AutoDesk公司开发的通用CAD工作平台,在机械、造船、电子、汽车、测绘、建筑等许多行业中得到广泛的应用,其完善的图形绘制和编辑功能,多种接口文件,较强的数据交换能力,特别是开放的二次开发功能给用户提供了有力的技术支撑。笔者以AutoCAD2004为背景,应用VBA开发工具和Access数据库技术成功地实现了自动提取CAD图纸明细表与进行数据库管理的研究目标并取得较好的实用效果。一、自动提取AUTOCAD图纸明细表工程技术图纸的右下角区域一般都布置着标题明细栏,记载着图形总体和明细的特征信息和基本技术要数,它是所有派生技术文件的信息源头和依据,CAD图纸继承了这个惯例。我国国家技术标准GB/T10609.1~2-1989对图纸标题明细栏的形式、内容、尺寸都作了具体规定。虽然各企业图纸标题明细栏样式不尽相同,但大同小异,基本结构一致。标题栏记载着图形的外部信息,明细栏记载着图形内在的详细要素和彼此的关联(图一)。图一明细栏由若干明细行组成,明细行则由各栏目组合。自动提取AUTOCAD图纸明细表的信息其实质就是针对明细行对各栏目进行提取数据的操作。提取明细行数据的方法概括起来,通常有坐标定位法和块行取值法两种:1.坐标定位法:即先点选起始明细行左下角坐标与末尾明细行右上角坐标所在的位置,确定提取数据的区域范围,对该区域范围内的所有实体对象进行逐一扫描,读出文字对象(TEXT、MTEXT)的(X、Y)坐标属性和字符串属性。通过文字对应坐标值的分析确定该文字在明细表中的位置,实现自动提取数据的操作。这种方法对单图的DWG文件效果较好,但对多图的DWG文件和不规则的标题明细栏操作起来就很复杂且取数的精度也较难控制,实用效果不够理想,这种方法对以往标题栏未作规范要求的老图纸其作用显而易见。2.块行取值法:即利用AutoCAD块行属性特征来提取明细栏的信息。在AutoCad内部对象模型(AutoCadObjectModel)以层次结构组织起来,顶层可编程的Application对象启动AutoCAD应用程序的一个实例,通过Application对象定位到其它对象;第2层是Document和Preference对象,Document对象代表当前在AutoCAD应用程序窗口中打开并操作的一个AutoCAD图形文件,Preference对象对应于Preference对话框包含AutoCAD当前的配置信息;第3层是Document的集合对象,如ModelSpace,PaperSpace,Blocks对象等等,通过集合对象我们就可以访问当前图形中的所有实体。块行取值法主要使用集合中Attribute和Block两个对象。具体设计明细行时,没有格式限制,唯一要求就是必须使一个Attribute对象对应明细行中的一个栏目项,将对应明细行中所有栏目的Attribute对象组合在一起放入Block对象中,该Block对象就是用户定义的块行(明细行)。将定义好的块行依次插入(复制)到图纸标题栏上方,组成图纸明细栏。其操作如下:绘图→块→定义属性(图二、图三)修改→对象→属性→块属性管理器(图四、图五)(图二)(图三)(图四)(图五)(图六)Attribute对象是具有交互功能的一种标签,含有3个配置项:Tag,Value和Prompt。Tag项是该Attribute对象的标志符,即Attribute对象的名字。例如Tag设置为“件号”,表示该Attribute对应明细栏中的“件号”栏目。Value项表示Attribute中包含的真实数值,如某个具体的件号值为“001”。在定义Attribute对象时,由于初始明细栏目中的具体内容不确定,则该属性一般暂不输入数据。待块行建立后其输入的数据就存储在Attribute对象中,这样通过程序访问Attribute对象的Value属性就可以获取其中的数据。Prompt项表示Attribute的提示信息,引导用户完成数据输入操作。Block对象是一个容器对象,该Block包含多个Attribute对象。在AutoCAD图形中插入明细行后,只要点击该行系统就会提示用户输入相应的值,并显示在图形标题明细栏中。在开发中要注意区分Block和BlockRef(块引用对象)、Attribute和AttributeRef(属性引用对象)对象。在AutoCAD图形中定义Block时,该Block对应Block对象。将定义好的Block插入到另一个图形中,就是基于Block的定义生成一个实例,该实例就是BlockRef对象;同样,在AutoCAD图形中定义Attribute时,该Attribute对应Attribute对象。将包含在Block中Attribute插入到另一个图形中,就是基于Attribute的定义生成实例,实例对应的就是AttributeRef对象。因此在从AutoCAD图形的明细栏中自动提取管理信息时,涉及到的两种对象是BlockRef和AttributeRef对象.将按上述方法定义好的规范明细栏插入到AutoCAD图形中后,通过ActiveXAutomation技术就能将明细栏中的信息提取出来。在Document的集合对象中Modelspace对象是一个特殊最大的BLOCK,包含图纸中所有实体(图形对象),由于BLOCK、Attribute允许嵌套,因此为搜索当前实体中的属性信息提供了方便。基本算法上使用了递归调用扫描当前图纸中的所有实体,通过实体的EntityType属性判断该实体是否是BlockRef对象,如果是,则判断该BlockRef对象中是否包含AttributeRef对象。如果包含则获取AttributeRef对象的列表。然后扫描此列表,通过TagString和TextString属性获取每个AttributeRef对象中的数据,并同步写入ACCESS数据库;当扫描结束时,明细栏中所有AttributeRef对象中包含的信息都被提取出来,自动在ACCESS数据库中即可形成初步的明细数据表。在AUTOCAD中自动提取明细表数据解决方案思路如(图七)所示:(图七)VBA自动提取CAD图纸明细表及数据库管理的研究与实践(二)来源:原创点击数:3340时间:2009-12-3111:24:23作者:碧海摘要:笔者认为:在企业信息化建设中,依靠软件商开发和购买大型管理软件是必要的,但不是唯一的。信息系统的开发和应用切忌一味搞“大而全”、“高版本”,而应针对应用的具体对象灵活的采取不同的开发方式。需要强调的是:充分地调动和挖掘本企业信息技术人员的积极性和创造性,有效地组织他们去攻克解决企业信息化道路上的难题和开发实用型专业化软件工具显得尤其重要,这才是企业信息化建设的真正动力和技术支撑。遗憾的是这个问题也正是当前许多企业在信息技术开发工作中的不足之处。一切管理软件都是工具,工具不是万能的,关键还是人的创新精神和责任心。因此能否真正发挥软件的作用解决企业的实际问题,还有待于依靠企业领导、管理人员、信息技术人员的同心协力,鼎力相助。这种信息系统开发的模式也是企业特别是中小型企业信息化建设的一条可借鉴的有效途径。正文:二、VBA编程自动提取CAD图纸明细表及进行数据库管理的要点本研究采用AutoCAD2004设计图纸明细表,Access2003数据库进行管理。系统设计可分为AutoCAD2004二次开发和数据库管理两个组成部分,使用VBA编程工具开发系统。(一)AutoCAD2004二次开发1.建立自定义菜单:启动CAD→工具→自定义→编辑自定义文件→当前菜单→进入ACAD记事本→编辑→查找POP11→修改→保存自定义菜单修改内容:***POP11**vba应用ID_vba应用[&vba应用]ID_提取图纸明细表[-&提取图纸明细表]ID_保存为Excel表[&保存为Excel表]^C^C_-vbarunm_excel.dtexcelID_保存为Access表[&保存为Access数据库]^C^C_-vbarunm_access.dtaccess***POP12注释:***POP11----第11项**vba应用----别名ID_vba应用[&vba应用]----显示vba应用菜单项ID_提取图纸明细表[-&提取图纸明细表]-----表示有下级子菜单显示提取图纸明细表ID_保存为Excel表[&保存到Excel表]^C^C_-vbarunm_excel.dtexcel----显示保存到Excel表,并运行ACAD工程中的模块m_excel中的宏(过程)dtexcel(打开图纸时操作菜单自动提取明细表到指定的Excel表)。ID_保存为Access表[&保存为Access数据库]^C^C_-vbarunm_access.dtaccess----显示保存到Access表,并运行ACAD工程中的模块m_access中的宏(过程)dtaccess(打开图纸时操作菜单自动提取明细表到指定的Access表)。将编辑后的acad.dvb文件COPY到C:\Programfiles\autocad2004\support\目录中。2.编制VBA提取图纸明细表数据程序:(1)提取数据到Excel表的程序要点(2)提取数据到Access表的程序要点(二)建立ACCESS数据库管理信息系统1.建立数据库MDB应用文件:为了统一、集中、有效地管理数据,便于系统调试、更新和升级,将程序和数据分别存放在两个MDB文件中,本例自动提取的CAD明细表数据存放在D:\产品数据库。2.设计信息管理系统:本系统在ACCESS2003环境下应用VBA编程技术开发。设计信息管理系统时要着重考虑以下问题:⑴明细表序号(件号)编码的设计明细表序号一方面反映图纸的顺序和相互关系,另一方面也是数据库管理中进行排序、分类、汇总的依据,因此序号的编码设计和处