欢迎来到装配图网! | 帮助中心 装配图网zhuangpeitu.com!
装配图网
ImageVerifierCode 换一换
首页 装配图网 > 资源分类 > DOCX文档下载
 

利用VBA编程实现从EXCEL表到AUTOCAD表转换(doc22)(1)

  • 资源ID:155375289       资源大小:42.06KB        全文页数:14页
  • 资源格式: DOCX        下载积分:20积分
快捷下载 游客一键下载
会员登录下载
微信登录下载
三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
二维码
微信扫一扫登录
下载资源需要20积分
邮箱/手机:
温馨提示:
用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

利用VBA编程实现从EXCEL表到AUTOCAD表转换(doc22)(1)

利用VBBA编程程实现从从EXCCEL表表到AUUTOCCAD表表转换摘要:该该程序可可将Exxcell表格中中的所有有单元格格全部按按原来大大小、风风格转换换到AuutoCCAD文文件中来来。在转转换过程程中,表表格线条条的转换换和文字字转换是是重点。文文字转换换采用了了直接利利用AdddMttextt命令提提供的属属性进行行转换,避避免了已已往修改改形文件件来进行行文字标标注的方方法,直直接控制制表格文文字字体体、大小小、下划划线、上上下脚标标,倾斜斜,加粗粗等,使使每个文文字的风风格均可可以得到到很好的的控制,极极大提高高了文字字标注的的灵活性性。关键词:计算机机- 一、前前言 - Miicroosofft EExceel 软件件具有十十分强大大的制表表、表格格计算等等功能,是是普通人人员常用用的制表表工具。可可以通过过其内嵌嵌的VBBA语言言可以控控制Miicroosofft EExceel 的的整个操操作过程程。- AuutoCCAD是是由AuutoDDeskk公司的的工程绘绘图软件件,是CCAD市市场的主主流产品品,功能能十分强强大,是是工程制制图人员员常用的的软件之之一。AAutooDessk公司司从R114版以以后,为为其提供供了VBBA语言言接口。- 在工工程制图图中,常常常需要要在图中中插入绘绘制表格格,一般般有两种种方法。其其一,是是利用剪剪贴板,将将Miccrossoftt Exxcell表格拷拷贝至剪剪贴板中中,然后后打开AAutooCADD文件,再再将剪贴贴板中的的文件粘粘贴至所所需位置置。这种种方法十十分简单单,但有有其固有有的缺点点。在保存存文件必必须将.xlss和.dwwg文件件保存在在一起,一一旦缺少少exccel环环境,则则再对表表格继续续修改。同时打开多个表格操作,需要占据较大的内存空间。文件体积变得很大,表格有时在.dwg文件中以图标形式显示,不便于观察。- 第二二种方法法,即利利用Miicroosofft EExceel、AuttoCAAD都提提供的VVBA功功能,编编制程序序进行转转换,将将Miccrossoftt Exxcell表格按按原来样样子转换换,即把把Miccrossoftt Exxcell表格中中的文字字和线条条信息全全部读取取出来,在在AuttoCAAD文件件里按照照一一对对应的方方式写出出来,确确保转换换后的表表格与原原表格一一致。这这样彻底底避免了了前种方方法的缺缺点,便便于表格格内容编编辑。本本文着重重介绍此此方法。- 二、表表格转换换工作机机理分析析及具体体实现方方法- 1表格转转换工作作机理分分析- 在制制表过程程中,经经常遇到到两个概概念,表表和方格格。- 在Miccrossoftt Exxcell中,与与表对应应的对象象是工作作表(SSheeet或Worrkshheett),与每一一个表格格方格相相对应的的对象是是单元格格区域(range),它可以仅包括一个单元格(cell),也可以由多个单元格合并而成。- 在AuttoCAAD中,没没有与表表对应的的对象,但但表可以以理解由由若干条条线和文文字对象象组合而而成。- 根据据上述分分析,可可以发现现如下的的转换方方法:- 读取取Miccrossoftt Exxcell文件中中的最小小对象-单元格格区域(rannge)的主要要信息-线线条和文文字,然然后在AAutooCADD文件里里在指定定图层、位位置画线线条,书书写文字字。通过过循环,遍遍历所有有单元格格区域(rannge),边读读边写,最最终完成成表格的的转换。转转换过程程中,保保持线条条、文字字及其相相关属性性不发生生改变。- 下面面就转换换工作的的两个主主要对象象表格线线条和表表格文字字进行讨讨论。- 2、表表格线条条的转换换- Miicroosofft EExceel 中中内嵌的的VBAA为我们们获取EExceel文件件信息提提供了极极大便利利。通常常,通过过访问rrangge对象象,可以以获得许许多信息息。访问问分析表表格的属属性应从从分析rrangge开始始。每一一个raangee包括许许多对象象和属性性,例如,ffontt对象可可以返回回rannge的的字体信信息。通通过遍历历,即可获获得整个个表格信信息。获获取表格格信息的的目的在在于准确确地按照照位置画画表格线线,同时时确定文文字位置置。- 在获获取表格格信息时时,存在在一个最最佳算法法问题。以以下就画画线问题题为例,阐阐明问题题和解决决方法。- 假设设表格由由a(aa>=11)行b(bb>=11)列组组成,xx,y为循环环变量, 表格格完全由由单元格格组成,由由于在每每个单元元格都有有4条边,让让x从1开始循循环到aa, 再再y从1开始循循环到bb,读取取每个单单元格的的4条边,会读取取a*bb*4次次,重复复读取aa*b*2次。当当x=11时,读读取上边边;当yy=1时时读取,左边,其其余情况况读取右右边,下下边。共共读取aa+b+ a*b*22次。以以3行4列为例例,共读读取3+4+33*4*2=331次,与与实际表表格的边边数相同同,没有有重复读读取。- 对合合并单元元格信息息的读取取是个难难点。因因为如果果按照单单元格的的位置依依次读取取,那么么由a行b列个单单元格(cell)合并而成的单元格区域(range)仅有4条边,采用上述计算方法,需要读取a+b+ a*b*2次,重复读取a+b+ a*b*2 - 4次。以以3行4列为例,共读取3+4+3*4*2=31次,重复读取31 - 4=27次。算法有重复。如果按照行号,列号读取,合并单元格的行号、列号只有一个,其值为最靠左、靠上的那个单元格的行号、列号。例如,将A2:E5的单元格合并后,其行号为2,列号为A。这样由多个合并单元格组合后的表格行号、列号有间断,不连续,无法进行循环读取信息。笔者通过研究发现,函数address()和单元格的mergearea属性可以获得合并单元格的准确信息。具体方法为:读取cells(x,y)单元格时,用address()判断包含cells(x,y)单元格的合并单元格区域c.mergearea的绝对地址,如果前4个字符与cells(x,y) 单元格的地址相同,为cells(x,y)单元格为合并单元格区域最靠上、靠左的那个合并单元格,读取其4条边信息,否则不读取。这样,彻底避免了重复读取,同时提高了整个读取和画线速度。-在AuttoCAAD中,线线条有多多种,考考虑能够够方便控控制线条条属性,选选用了多多义线。具具体命令令如下:RettVall=obbjecct.AAddLLighhtWeeighhtPoolyllinee(VeertiicessLisst) - 下面面的程序序演示表表格线条条读取和和画表格格线的具具体过程程。Sub hxww() Dim a aas iinteergeer 表格的的最大行行数Dim b aas iinteergeer 表格的的最大列列数Dim xinnit as douublee 插插入点xx坐标Dim yinnit as douublee 插插入点yy坐标Dim zinnit as douublee 插插入点zz坐标Dim xinnserrt aas ddoubble 当前前单元格格的左上上角点的的x左标Dim yinnserrt aas ddoubble 当前前单元格格的左上上角点的的y左标Dim ptaarraay (0 tto 22) aas ddoubble Dim x aas iinteegerr Dim y aas iinteegerr For x =1 tto aa For y=11 too b Set c = xllsheeet.Rannge(zh(y) + TTrimm(Sttr(xx) 以行号号、列号号获得单单元格地地址Set ma = cc.MeergeeAreea 求出单单元格CC的合并并单元格格地址If LLeftt(Trrim(ma.Adddresss), 4) = Triim(cc.Adddreess) Thhen 假如c.merrgeaareaa的绝对对地址,如果前前4个字符符与c单元格格的地址址相同xl = "AA1:"" + ma.Adddresss xh = xllsheeet.Rannge(ma.Adddresss).Widdth yh = xllsheeet.Rannge(ma.Adddresss).Heiightt Set xlrrangge = xllsheeet.Rannge(xl) xinssertt = xlrrangge.WWidtth - xhh yinssertt = xlrrangge.HHeigght - yyh xpoiint = xxiniit + xiinseert ypoiint = yyiniit - yiinseert If xx = 1 TThenn If mma.BBordderss(xllEdggeToop).LinneSttylee <> xxlNoone Theen ptArrrayy(0) = xpoointt 第一点点坐标(数数组下标标 0 andd 1) ptArrrayy(1) = ypoointt ptArrrayy(2) = xpoointt + xh 第二点点坐标(数数组下标标 2 andd 3) ptArrrayy(3) = ypoointt End If Lineeweiightt lwwplooyobbj, ma.Borrderrs(xxlEddgeTTop).Weeighht End If If mma.BBordderss(xllEdggeBoottoom).LinneSttylee < > xlNNonee Thhen ptArrrayy(0) = xpoointt + xh 第三点点坐标(数数组下标标 0 andd 1) ptArrrayy(1) = ypoointt - yh ptArrrayy(2) = xpoointt 第四点点坐标(数数组下标标 2 andd 3)ptArrrayy(3) = ypoointt yh Lineeweiightt lwwplooyobbj, ma.BBordderss(xllEdggeBoottoom).Weiightt End If If yy = 1 TThenn If mma.BBordderss(xllEdggeLeeft).LiineSStylle < > xlNNonee Thhen ptArrrayy(0) = xpoointt 第四点点坐标(数数组下标标 0 andd 1) ptArrrayy(1) = ypoointt - yh ptArrrayy(2) = xpoointt 第一点点坐标(数数组下标标 2 andd 3) ptArrrayy(3) = ypoointt End If Lineeweiightt lwwplooyobbj, ma.Borrderrs(xxlEddgeLLeftt).WWeigght End If If mma.BBordderss(xllEdggeRiightt).LLineeStyyle < > xlNNonee Thhen ptArrrayy(0) = xpoointt + xh 第二点点坐标(数数组下标标 0 andd 1) ptArrrayy(1) = ypoointt ptArrrayy(2) = xpoointt + xh 第三点点坐标(数数组下标标 2 andd 3)ptArrrayy(3) = ypoointt yh Lineeweiightt lwwplooyobbj, ma.BBordderss(xllEdggeRiightt).WWeigght End If Set lwpployyobjj = moSSpacce.AAddLLighhtWeeighhtPoolyllinee(pttArrray) 在AuutoCCAD文文件里画画线Withh lwwplooyobbj .Layyer = nnewllayeer.nnamee 指指定lwwplooyobbj所在在图层.Collor = aacBllue 指定定lwpployyobjj的颜色色End Witth Lwplloyoobj.Upddatee Nextt y Nextt x End Subb 下面程程序控制制线条粗粗细Sub Linneweeighht(BByVaal llinee Ass Obbjecct, u AAs IInteegerr) Seleect Casse uu Casee 1 Calll liine.SettWiddth(0, 0.11, 00.1) Casee 2 Calll liine.SettWiddth(0, 0.33, 00.3) Casee -441388 Calll liine.SettWiddth(0, 0.55, 00.5) Casee 4 Calll liine.SettWiddth(0, 1, 1) Casee Ellse Calll liine.SettWiddth(0, 0.11, 00.1) End Sellectt End Subb 下面程程序完成成列号转转换Funcctioon zzh(ppp AAs IInteegerr) AAs SStriing If ppp << 266 Thhen zh = Chhr(664 + ppp) Elsee zh = Chhr(664 + Innt(ppp / 266) + CChr(64 + ppp MMod 26) End If End Funnctiion - 3、表表格文字字转换- 表格格文字转转换包括括表格文文字本身身转换和和表格文文字在表表格中位位置的转转换两个个部分。- 在AuttoCAAD中,文文字标注注的形式式有多种种,与MMicrrosooft Exccel 单元格格区域多多行文本本内容相相对应的的是多行行文本命命令。AAutooCADD提供的的VBAA添加多多行文本本的命令令语句是是:RetVVal = oobjeect.AdddMTeext(InsserttionnPoiint, Wiidthh, TTextt) - 通过过修改RRetVVal的的属性可可以控制制表格文文字在表表格中的的位置。- (11)表表格文字字本身的的转换- 分析析AdddMTeext命命令可以以得出:表格文文字所在在位置、文文字内容容宽度,文文字内容容,均可可通过此此命令来来添加。然然而表格格文字字字体,大大小,下下划线、上上下脚标标,倾斜斜,加粗粗等却不不能。一一般的方方法是采采用修改改字体形形文件的的方法来来实现,方方法烦琐琐,不便便于实现现,而且且仅对修修改过形形文件的的字体有有效。况况且当同同一文字字块内的的不同文文字的字字体,大大小,下下划线、上上下脚标标,倾斜斜,加粗粗不同时时,使用用修改字字体形文文件的方方法也无无法实现现。本文文介绍一一种直接接利用MMtexxt命令令提供的的方法进进行转换换。- 在AdddMTeext命命令中,影影响文字字内容和和文字属属性的参参数Teext。在在具体文文字前加加上一定定的控制制符号可可以控制制文字的的文字属属性,具具体控制制符号可可以参阅阅AuttoCAAD帮助助文件。例例如,F宋宋体;Q188;WW1.22;ABBCDEEFG把“ABCCDEFFG”设设置成宋宋体、向向右倾斜斜18度,每每个字的的宽度是是正常宽宽度1.2倍。- 本程程序具体体采用的的方法是是:读取取Miccrossoftt Exxcell文件某某一单元元格区域域里的某某第j个字符符属性(字字体,大大小,下下划线、上上、下脚脚标,倾倾斜,加加粗),读读取Miicroosofft EExceel文件件某一单单元格区区域里的的某第jj+1个个字符属属性,如如果与第第j个字符符相同,则则二者采采用同样样的控制制符号;若不同同,则从从第j+1个字字符开始始,重复复前面的的工作。Sub wz ( ) Charr = RTrrim(Lefft(cc.Chharaacteers.Capptioon, 2566) If CCharr < > EEmptty TThenn texttStrr = "" For j = 1 To Lenn(Chhar) If cc.Chharaacteers(j, 1).Fonnt.UUndeerliine = xlUnnderrlinneSttyleeNonne TThenn cpt = cc.Chharaacteers(j, 1).Capptioon sonsstr = FForeeFonntSttr(cc, jj) temppstrr = "" Do WWhille jj + 1 << = Lenn(Chhar) sonsstr11 = ForreFoontSStr(c, j + 1) If ssonsstr11 = sonnstrr Thhen j = j + 1 temppstrr = temmpsttr + c.Chaaraccterrs(jj, 1).CCapttionn Elsee Exitt Doo End If LoopptexttStrr = texxtSttr + "" + soonsttr + cppt + teempsstr + """ Elsee cpt = cc.Chharaacteers(j, 1).Capptioon sonsstr = FForeeFonntSttr(cc, jj) temppstrr = "" Do WWhille jj + 1 << = Lenn(Chhar) sonsstr11 = ForreFoontSStr(c, j + 1) If ssonsstr11 = sonnstrr Thhen j = j + 1 temppstrr = temmpsttr + c.Chaaraccterrs(jj, 1).CCapttionn Elsee Exitt Doo End If LoopptexttStrr = texxtSttr + "L"" + sonsstr + ccpt + ttemppstrr + "ll" End If Nextt j End If End Subb 下面函函数控制制字体本本身属性性Funcctioon FForeeFonntSttr(mm Ass Raangee, uu Ass Inntegger) Ass Sttrinng a1 = "F" + mm.Chharaacteers(u, 1).Fonnt.NNamee + """ 字体 a2 = IIIf(mm.Chharaacteers(u, 1).Fonnt.SSupeersccrippt = Truee, ""H00.333x;A2;", "") '上上脚标a3 = IIIf(mm.Chharaacteers(u, 1).Fonnt.SSubsscriipt = Truee, ""H00.333x;A0;", "") '下下脚标a4 = IIIf(mm.Chharaacteers(u, 1).Fonnt.FFonttStyyle = "倾斜"", ""Q118;"", """) '倾斜斜a5 = IIIf(mm.Chharaacteers(u, 1).Fonnt.FFonttStyyle = "加粗"", ""W11.2;", "") '加加粗 a6 = IIIf(mm.Chharaacteers(u, 1).Fonnt.FFonttStyyle = "加粗倾倾斜", "W1.2;Q188;", """) '' 加粗粗倾斜ForeeFonntSttr = a11 + a2 + aa3 + a44 + a5 + aa6 End Funnctiion - (2).表格中中表格文文字位置置的转换换- 对文文字对象象的属性性的直接接控制来来实现,通通过wiith.ennd wwithh 结构构可以很很容易地地控制文文字的高高度、图图层、颜颜色、书书写方向向。由于于Mteext文文字提供供支持的的排列位位置分为为9种,必必须根据据Miccrossoftt Exxcell表格文文字的排排列方式式加以合合适的判判定,然然后进行行转换。其其具体的的实现方方法详见见下面的的程序。Sub kz( ) Withh teextOObj 文字字对象.Heiightt = texxtHggt .Layyer = nnewllayeer.NNamee 设设置图层层.Collor = aacReed 设置颜颜色.DraawinngDiirecctioon = 1 设置置书写方方向If (ma.VerrticcalAAliggnmeent = xxlToop _ Or mma.VVertticaalAllignnmennt = xllGenneraal) _ And (maa.HoorizzonttalAAliggnmeent = xxlLeeft _ Or mma.HHoriizonntallAliignmmentt = xlGGeneerall) _ Thenn .AAttaachmmenttPoiint = 11 'aacAtttacchmeentPPoinntToopLeeft If (ma.VerrticcalAAliggnmeent = xxlToop _ Or mma.VVertticaalAllignnmennt = xllGenneraal) _ And (maa.HoorizzonttalAAliggnmeent = xxlCeenteer _ Or mma.HHoriizonntallAliignmmentt = xlJJusttifyy _ Or mma.HHoriizonntallAliignmmentt = xlDDisttribbuteed) _ Thenn .AAttaachmmenttPoiint = 22 'aacAtttacchmeentPPoinntToopCeenteer If (ma.VerrticcalAAliggnmeent = xxlToop _ Or mma.VVertticaalAllignnmennt = xllGenneraal) _ And ma.HorrizoontaalAllignnmennt = xllRigght _ Thenn .AAttaachmmenttPoiint = 33 'aacAtttacchmeentPPoinntToopRiightt If (ma.VerrticcalAAliggnmeent = xxlCeenteer _ Or mma.VVertticaalAllignnmennt = xllJusstiffy _ Or mma.VVertticaalAllignnmennt = xllDisstriibutted) _ And (maa.HoorizzonttalAAliggnmeent = xxlLeeft _ Or mma.HHoriizonntallAliignmmentt = xlGGeneerall) _ Thenn .AAttaachmmenttPoiint = 44 'aacAtttacchmeentPPoinntMiiddlleLeeft If (ma.VerrticcalAAliggnmeent = xxlCeenteer _ Or mma.VVertticaalAllignnmennt = xllJusstiffy _ Or mma.VVertticaalAllignnmennt = xllDisstriibutted) _ And (maa.HoorizzonttalAAliggnmeent = xxlCeenteer _ Or mma.HHoriizonntallAliignmmentt = xlJJusttifyy _ Or mma.HHoriizonntallAliignmmentt = xlDDisttribbuteed) _ Thenn .AAttaachmmenttPoiint = 55 'aacAtttacchmeentPPoinntMiiddlleCeenteer If (ma.VerrticcalAAliggnmeent = xxlCeenteer _ Or mma.VVertticaalAllignnmennt = xllJusstiffy _ Or mma.VVertticaalAllignnmennt = xllDisstriibutted) _ And ma.HorrizoontaalAllignnmennt = xllRigght _ Thenn .AAttaachmmenttPoiint = 66 'aacAtttacchmeentPPoinntMiiddlleRiightt If mma.VVertticaalAllignnmennt = xllBotttomm _ And (maa.HoorizzonttalAAliggnmeent = xxlLeeft _ Or mma.HHoriizonntallAliignmmentt = xlGGeneerall) _ Thenn .AAttaachmmenttPoiint = 77 'aacAtttacchmeentPPoinntBoottoomLeeft If mma.VVertticaalAllignnmennt = xllBotttomm _ And (maa.HoorizzonttalAAliggnmeent = xxlCeenteer _ Or mma.HHoriizonntallAliignmmentt = xlJJusttifyy _ Or mma.HHoriizonntallAliignmmentt = xlDDisttribbuteed) _ Thenn .AAttaachmmenttPoiint = 88 'aacAtttacchmeentPPoinntBoottoomCeenteer If mma.VVertticaalAllignnmennt = xllBotttomm _ And ma.HorrizoontaalAllignnmennt = xllRigght _ Thenn .AAttaachmmenttPoiint = 99 'aacAtttacchmeentPPoinntBoottoomRiightt End Witth texttObjj.Uppdatte End Subb - 三、功功能与特特点介绍绍- 该程程序可将将Exccel表表格中的的所有单单元格全全部按原原来大小小、风格格转换到到AuttoCAAD文件件中来。在在转换过过程中,表表格线条条的转换换和文字字转换是是重点。文文字转换换采用了了直接利利用AdddMttextt命令提提供的属属性进行行转换,避避免了已已往修改改形文件件来进行行文字标标注的方方法,直直接控制制表格文文字字体体、大小小、下划划线、上上下脚标标,倾斜斜,加粗粗等,使使每个文文字的风风格均可可以得到到很好的的控制,极极大提高高了文字字标注的的灵活性性。- 本程程序采用用Vissuall BAASICC编制,需需要Miicroosofft EExceel 220000和AuttoCAAD RR14运运行环境境,编译译后通过过。

注意事项

本文(利用VBA编程实现从EXCEL表到AUTOCAD表转换(doc22)(1))为本站会员(jk****g)主动上传,装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知装配图网(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!