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

上传人:jk****g 文档编号:155375289 上传时间:2022-09-23 格式:DOCX 页数:14 大小:42.06KB
收藏 版权申诉 举报 下载
利用VBA编程实现从EXCEL表到AUTOCAD表转换(doc22)(1)_第1页
第1页 / 共14页
利用VBA编程实现从EXCEL表到AUTOCAD表转换(doc22)(1)_第2页
第2页 / 共14页
利用VBA编程实现从EXCEL表到AUTOCAD表转换(doc22)(1)_第3页
第3页 / 共14页
资源描述:

《利用VBA编程实现从EXCEL表到AUTOCAD表转换(doc22)(1)》由会员分享,可在线阅读,更多相关《利用VBA编程实现从EXCEL表到AUTOCAD表转换(doc22)(1)(14页珍藏版)》请在装配图网上搜索。

1、利用VBBA编程程实现从从EXCCEL表表到AUUTOCCAD表表转换摘要:该该程序可可将Exxcell表格中中的所有有单元格格全部按按原来大大小、风风格转换换到AuutoCCAD文文件中来来。在转转换过程程中,表表格线条条的转换换和文字字转换是是重点。文文字转换换采用了了直接利利用AdddMttextt命令提提供的属属性进行行转换,避避免了已已往修改改形文件件来进行行文字标标注的方方法,直直接控制制表格文文字字体体、大小小、下划划线、上上下脚标标,倾斜斜,加粗粗等,使使每个文文字的风风格均可可以得到到很好的的控制,极极大提高高了文字字标注的的灵活性性。关键词:计算机机- 一、前前言 - Mi

2、icroosofft EExceel 软件件具有十十分强大大的制表表、表格格计算等等功能,是是普通人人员常用用的制表表工具。可可以通过过其内嵌嵌的VBBA语言言可以控控制Miicroosofft EExceel 的的整个操操作过程程。- AuutoCCAD是是由AuutoDDeskk公司的的工程绘绘图软件件,是CCAD市市场的主主流产品品,功能能十分强强大,是是工程制制图人员员常用的的软件之之一。AAutooDessk公司司从R114版以以后,为为其提供供了VBBA语言言接口。- 在工工程制图图中,常常常需要要在图中中插入绘绘制表格格,一般般有两种种方法。其其一,是是利用剪剪贴板,将将Micc

3、rossoftt Exxcell表格拷拷贝至剪剪贴板中中,然后后打开AAutooCADD文件,再再将剪贴贴板中的的文件粘粘贴至所所需位置置。这种种方法十十分简单单,但有有其固有有的缺点点。在保存存文件必必须将.xlss和.dwwg文件件保存在在一起,一一旦缺少少exccel环环境,则则再对表表格继续续修改。同时打开多个表格操作,需要占据较大的内存空间。文件体积变得很大,表格有时在.dwg文件中以图标形式显示,不便于观察。- 第二二种方法法,即利利用Miicroosofft EExceel、AuttoCAAD都提提供的VVBA功功能,编编制程序序进行转转换,将将Miccrossoftt Exxc

4、ell表格按按原来样样子转换换,即把把Miccrossoftt Exxcell表格中中的文字字和线条条信息全全部读取取出来,在在AuttoCAAD文件件里按照照一一对对应的方方式写出出来,确确保转换换后的表表格与原原表格一一致。这这样彻底底避免了了前种方方法的缺缺点,便便于表格格内容编编辑。本本文着重重介绍此此方法。- 二、表表格转换换工作机机理分析析及具体体实现方方法- 1表格转转换工作作机理分分析- 在制制表过程程中,经经常遇到到两个概概念,表表和方格格。- 在Miccrossoftt Exxcell中,与与表对应应的对象象是工作作表(SSheeet或Worrkshheett),与每一一个

5、表格格方格相相对应的的对象是是单元格格区域(range),它可以仅包括一个单元格(cell),也可以由多个单元格合并而成。- 在AuttoCAAD中,没没有与表表对应的的对象,但但表可以以理解由由若干条条线和文文字对象象组合而而成。- 根据据上述分分析,可可以发现现如下的的转换方方法:- 读取取Miccrossoftt Exxcell文件中中的最小小对象-单元格格区域(rannge)的主要要信息-线线条和文文字,然然后在AAutooCADD文件里里在指定定图层、位位置画线线条,书书写文字字。通过过循环,遍遍历所有有单元格格区域(rannge),边读读边写,最最终完成成表格的的转换。转转换过程程

6、中,保保持线条条、文字字及其相相关属性性不发生生改变。- 下面面就转换换工作的的两个主主要对象象表格线线条和表表格文字字进行讨讨论。- 2、表表格线条条的转换换- Miicroosofft EExceel 中中内嵌的的VBAA为我们们获取EExceel文件件信息提提供了极极大便利利。通常常,通过过访问rrangge对象象,可以以获得许许多信息息。访问问分析表表格的属属性应从从分析rrangge开始始。每一一个raangee包括许许多对象象和属性性,例如,ffontt对象可可以返回回rannge的的字体信信息。通通过遍历历,即可获获得整个个表格信信息。获获取表格格信息的的目的在在于准确确地按照照

7、位置画画表格线线,同时时确定文文字位置置。- 在获获取表格格信息时时,存在在一个最最佳算法法问题。以以下就画画线问题题为例,阐阐明问题题和解决决方法。- 假设设表格由由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+

8、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。这样由多个合

9、并单元格组合后的表格行号、列号有间断,不连续,无法进行循环读取信息。笔者通过研究发现,函数address()和单元格的mergearea属性可以获得合并单元格的准确信息。具体方法为:读取cells(x,y)单元格时,用address()判断包含cells(x,y)单元格的合并单元格区域c.mergearea的绝对地址,如果前4个字符与cells(x,y) 单元格的地址相同,为cells(x,y)单元格为合并单元格区域最靠上、靠左的那个合并单元格,读取其4条边信息,否则不读取。这样,彻底避免了重复读取,同时提高了整个读取和画线速度。-在AuttoCAAD中,线线条有多多种,考考虑能够够方便控控制

10、线条条属性,选选用了多多义线。具具体命令令如下: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 xinns

11、errt 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的合并并单元格格地

12、址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 yinsser

13、tt = 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) ptArrray

14、y(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)

15、= 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) ptArrra

16、yy(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

17、) = 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 Lwpll

18、oyoobj.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.

19、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、表表格文字字转换- 表格格文字转转换包括

20、括表格文文字本身身转换和和表格文文字在表表格中位位置的转转换两个个部分。- 在AuttoCAAD中,文文字标注注的形式式有多种种,与MMicrrosooft Exccel 单元格格区域多多行文本本内容相相对应的的是多行行文本命命令。AAutooCADD提供的的VBAA添加多多行文本本的命令令语句是是:RetVVal = oobjeect.AdddMTeext(InsserttionnPoiint, Wiidthh, TTextt) - 通过过修改RRetVVal的的属性可可以控制制表格文文字在表表格中的的位置。- (11)表表格文字字本身的的转换- 分析析AdddMTeext命命令可以以得出:

21、表格文文字所在在位置、文文字内容容宽度,文文字内容容,均可可通过此此命令来来添加。然然而表格格文字字字体,大大小,下下划线、上上下脚标标,倾斜斜,加粗粗等却不不能。一一般的方方法是采采用修改改字体形形文件的的方法来来实现,方方法烦琐琐,不便便于实现现,而且且仅对修修改过形形文件的的字体有有效。况况且当同同一文字字块内的的不同文文字的字字体,大大小,下下划线、上上下脚标标,倾斜斜,加粗粗不同时时,使用用修改字字体形文文件的方方法也无无法实现现。本文文介绍一一种直接接利用MMtexxt命令令提供的的方法进进行转换换。- 在AdddMTeext命命令中,影影响文字字内容和和文字属属性的参参数Teex

22、t。在在具体文文字前加加上一定定的控制制符号可可以控制制文字的的文字属属性,具具体控制制符号可可以参阅阅AuttoCAAD帮助助文件。例例如,F宋宋体;Q188;WW1.22;ABBCDEEFG把“ABCCDEFFG”设设置成宋宋体、向向右倾斜斜18度,每每个字的的宽度是是正常宽宽度1.2倍。- 本程程序具体体采用的的方法是是:读取取Miccrossoftt Exxcell文件某某一单元元格区域域里的某某第j个字符符属性(字字体,大大小,下下划线、上上、下脚脚标,倾倾斜,加加粗),读读取Miicroosofft EExceel文件件某一单单元格区区域里的的某第jj+1个个字符属属性,如如果与第

23、第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).Cappti

24、oon 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

25、+ 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 =

26、 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;,

27、 ) 上上脚标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

28、;, ) 加粗粗倾斜ForeeFonntSttr = a11 + a2 + aa3 + a44 + a5 + aa6 End Funnctiion - (2).表格中中表格文文字位置置的转换换- 对文文字对象象的属性性的直接接控制来来实现,通通过wiith.ennd wwithh 结构构可以很很容易地地控制文文字的高高度、图图层、颜颜色、书书写方向向。由于于Mteext文文字提供供支持的的排列位位置分为为9种,必必须根据据Miccrossoftt Exxcell表格文文字的排排列方式式加以合合适的判判定,然然后进行行转换。其其具体的的实现方方法详见见下面的的程序。Sub kz( ) Withh

29、 teextOObj 文字字对象.Heiightt = texxtHggt .Layyer = nnewllayeer.NNamee 设设置图层层.Collor = aacReed 设置颜颜色.DraawinngDiirecctioon = 1 设置置书写方方向If (ma.VerrticcalAAliggnmeent = xxlToop _ Or mma.VVertticaalAllignnmennt = xllGenneraal) _ And (maa.HoorizzonttalAAliggnmeent = xxlLeeft _ Or mma.HHoriizonntallAliignmme

30、ntt = xlGGeneerall) _ Thenn .AAttaachmmenttPoiint = 11 aacAtttacchmeentPPoinntToopLeeft If (ma.VerrticcalAAliggnmeent = xxlToop _ Or mma.VVertticaalAllignnmennt = xllGenneraal) _ And (maa.HoorizzonttalAAliggnmeent = xxlCeenteer _ Or mma.HHoriizonntallAliignmmentt = xlJJusttifyy _ Or mma.HHoriizonnta

31、llAliignmmentt = xlDDisttribbuteed) _ Thenn .AAttaachmmenttPoiint = 22 aacAtttacchmeentPPoinntToopCeenteer If (ma.VerrticcalAAliggnmeent = xxlToop _ Or mma.VVertticaalAllignnmennt = xllGenneraal) _ And ma.HorrizoontaalAllignnmennt = xllRigght _ Thenn .AAttaachmmenttPoiint = 33 aacAtttacchmeentPPoinn

32、tToopRiightt If (ma.VerrticcalAAliggnmeent = xxlCeenteer _ Or mma.VVertticaalAllignnmennt = xllJusstiffy _ Or mma.VVertticaalAllignnmennt = xllDisstriibutted) _ And (maa.HoorizzonttalAAliggnmeent = xxlLeeft _ Or mma.HHoriizonntallAliignmmentt = xlGGeneerall) _ Thenn .AAttaachmmenttPoiint = 44 aacAtt

33、tacchmeentPPoinntMiiddlleLeeft If (ma.VerrticcalAAliggnmeent = xxlCeenteer _ Or mma.VVertticaalAllignnmennt = xllJusstiffy _ Or mma.VVertticaalAllignnmennt = xllDisstriibutted) _ And (maa.HoorizzonttalAAliggnmeent = xxlCeenteer _ Or mma.HHoriizonntallAliignmmentt = xlJJusttifyy _ Or mma.HHoriizonnta

34、llAliignmmentt = xlDDisttribbuteed) _ Thenn .AAttaachmmenttPoiint = 55 aacAtttacchmeentPPoinntMiiddlleCeenteer If (ma.VerrticcalAAliggnmeent = xxlCeenteer _ Or mma.VVertticaalAllignnmennt = xllJusstiffy _ Or mma.VVertticaalAllignnmennt = xllDisstriibutted) _ And ma.HorrizoontaalAllignnmennt = xllRig

35、ght _ Thenn .AAttaachmmenttPoiint = 66 aacAtttacchmeentPPoinntMiiddlleRiightt If mma.VVertticaalAllignnmennt = xllBotttomm _ And (maa.HoorizzonttalAAliggnmeent = xxlLeeft _ Or mma.HHoriizonntallAliignmmentt = xlGGeneerall) _ Thenn .AAttaachmmenttPoiint = 77 aacAtttacchmeentPPoinntBoottoomLeeft If mm

36、a.VVertticaalAllignnmennt = xllBotttomm _ And (maa.HoorizzonttalAAliggnmeent = xxlCeenteer _ Or mma.HHoriizonntallAliignmmentt = xlJJusttifyy _ Or mma.HHoriizonntallAliignmmentt = xlDDisttribbuteed) _ Thenn .AAttaachmmenttPoiint = 88 aacAtttacchmeentPPoinntBoottoomCeenteer If mma.VVertticaalAllignnm

37、ennt = 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运运行环境境,编译译后通过过。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


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