利用VBA編程實(shí)現(xiàn)從EXCEL表到AUTOCAD表轉(zhuǎn)換_第1頁(yè)
利用VBA編程實(shí)現(xiàn)從EXCEL表到AUTOCAD表轉(zhuǎn)換_第2頁(yè)
利用VBA編程實(shí)現(xiàn)從EXCEL表到AUTOCAD表轉(zhuǎn)換_第3頁(yè)
利用VBA編程實(shí)現(xiàn)從EXCEL表到AUTOCAD表轉(zhuǎn)換_第4頁(yè)
利用VBA編程實(shí)現(xiàn)從EXCEL表到AUTOCAD表轉(zhuǎn)換_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、利用VBA編程實(shí)現(xiàn)從EXCEL表到AUTOCAD表轉(zhuǎn)換摘要:該程序可將Exel表格中的所有單元格全部按原來(lái)大孝風(fēng)格轉(zhuǎn)換到AutAD文件中來(lái)。在轉(zhuǎn)換過(guò)程中,表格線(xiàn)條的轉(zhuǎn)換和文字轉(zhuǎn)換是重點(diǎn)。文字轉(zhuǎn)換采用了直接利用Addtext命令提供的屬性進(jìn)展轉(zhuǎn)換,防止了已往修改形文件來(lái)進(jìn)展文字標(biāo)注的方法,直接控制表格文字字體、大孝下劃線(xiàn)、上下腳標(biāo),傾斜,加粗等,使每個(gè)文字的風(fēng)格均可以得到很好的控制,極大進(jìn)步了文字標(biāo)注的靈敏性。關(guān)鍵詞:計(jì)算機(jī)-一、前言-irsftExel軟件具有非常強(qiáng)大的制表、表格計(jì)算等功能,是普通人員常用的制表工具??梢酝ㄟ^(guò)其內(nèi)嵌的VBA語(yǔ)言可以控制irsftExel的整個(gè)操作過(guò)程。-AutA

2、D是由AutDesk公司的工程繪圖軟件,是AD市場(chǎng)的主流產(chǎn)品,功能非常強(qiáng)大,是工程制圖人員常用的軟件之一。AutDesk公司從R14版以后,為其提供了VBA語(yǔ)言接口。-在工程制圖中,常常需要在圖中插入繪制表格,一般有兩種方法。其一,是利用剪貼板,將irsftExel表格拷貝至剪貼板中,然后翻開(kāi)AutAD文件,再將剪貼板中的文件粘貼至所需位置。這種方法非常簡(jiǎn)單,但有其固有的缺點(diǎn)。在保存文件必須將.xls和.dg文件保存在一起,一旦缺少exel環(huán)境,那么再對(duì)表格繼續(xù)修改。同時(shí)翻開(kāi)多個(gè)表格操作,需要占據(jù)較大的內(nèi)存空間。文件體積變得很大,表格有時(shí)在.dg文件中以圖標(biāo)形式顯示,不便于觀察。-第二種方法,

3、即利用irsftExel、AutAD都提供的VBA功能,編制程序進(jìn)展轉(zhuǎn)換,將irsftExel表格按原來(lái)樣子轉(zhuǎn)換,即把irsftExel表格中的文字和線(xiàn)條信息全部讀取出來(lái),在AutAD文件里按照一一對(duì)應(yīng)的方式寫(xiě)出來(lái),確保轉(zhuǎn)換后的表格與原表格一致。這樣徹底防止了前種方法的缺點(diǎn),便于表格內(nèi)容編輯。本文著重介紹此方法。-二、表格轉(zhuǎn)換工作機(jī)理分析及詳細(xì)實(shí)現(xiàn)方法-1表格轉(zhuǎn)換工作機(jī)理分析-在制表過(guò)程中,經(jīng)常遇到兩個(gè)概念,表和方格。-在irsftExel中,與表對(duì)應(yīng)的對(duì)象是工作表Sheet或rksheet,與每一個(gè)表格方格相對(duì)應(yīng)的對(duì)象是單元格區(qū)域range,它可以?xún)H包括一個(gè)單元格ell,也可以由多個(gè)單元格合

4、并而成。-在AutAD中,沒(méi)有與表對(duì)應(yīng)的對(duì)象,但表可以理解由假設(shè)干條線(xiàn)和文字對(duì)象組合而成。-根據(jù)上述分析,可以發(fā)現(xiàn)如下的轉(zhuǎn)換方法:-讀取irsftExel文件中的最小對(duì)象-單元格區(qū)域(range)的主要信息-線(xiàn)條和文字,然后在AutAD文件里在指定圖層、位置畫(huà)線(xiàn)條,書(shū)寫(xiě)文字。通過(guò)循環(huán),遍歷所有單元格區(qū)域(range),邊讀邊寫(xiě),最終完成表格的轉(zhuǎn)換。轉(zhuǎn)換過(guò)程中,保持線(xiàn)條、文字及其相關(guān)屬性不發(fā)生改變。-下面就轉(zhuǎn)換工作的兩個(gè)主要對(duì)象表格線(xiàn)條和表格文字進(jìn)展討論。-2、表格線(xiàn)條的轉(zhuǎn)換-irsftExel中內(nèi)嵌的VBA為我們獲取Exel文件信息提供了極大便利。通常,通過(guò)訪(fǎng)問(wèn)range對(duì)象,可以獲得許多信息

5、。訪(fǎng)問(wèn)分析表格的屬性應(yīng)從分析range開(kāi)場(chǎng)。每一個(gè)range包括許多對(duì)象和屬性,例如,fnt對(duì)象可以返回range的字體信息。通過(guò)遍歷,即可獲得整個(gè)表格信息。獲取表格信息的目的在于準(zhǔn)確地按照位置畫(huà)表格線(xiàn),同時(shí)確定文字位置。-在獲取表格信息時(shí),存在一個(gè)最正確算法問(wèn)題。以下就畫(huà)線(xiàn)問(wèn)題為例,說(shuō)明問(wèn)題和解決方法。-假設(shè)表格由a(a=1)行b(b=1)列組成,x,y為循環(huán)變量,表格完全由單元格組成,由于在每個(gè)單元格都有4條邊,讓x從1開(kāi)場(chǎng)循環(huán)到a,再y從1開(kāi)場(chǎng)循環(huán)到b,讀取每個(gè)單元格的4條邊,會(huì)讀取a*b*4次,重復(fù)讀取a*b*2次。當(dāng)x=1時(shí),讀取上邊;當(dāng)y=1時(shí)讀取,左邊,其余情況讀取右邊,下邊。共

6、讀取a+b+a*b*2次。以3行4列為例,共讀取3+4+3*4*2=31次,與實(shí)際表格的邊數(shù)一樣,沒(méi)有重復(fù)讀齲-對(duì)合并單元格信息的讀取是個(gè)難點(diǎn)。因?yàn)榧偃绨凑諉卧竦奈恢靡来巫x取,那么由a行b列個(gè)單元格ell合并而成的單元格區(qū)域(range)僅有4條邊,采用上述計(jì)算方法,需要讀取a+b+a*b*2次,重復(fù)讀取a+b+a*b*2-4次。以以3行4列為例,共讀取3+4+3*4*2=31次,重復(fù)讀取31-4=27次。算法有重復(fù)。假如按照行號(hào),列號(hào)讀取,合并單元格的行號(hào)、列號(hào)只有一個(gè),其值為最靠左、靠上的那個(gè)單元格的行號(hào)、列號(hào)。例如,將A2:E5的單元格合并后,其行號(hào)為2,列號(hào)為A。這樣由多個(gè)合并單元格

7、組合后的表格行號(hào)、列號(hào)有連續(xù),不連續(xù),無(wú)法進(jìn)展循環(huán)讀取信息。筆者通過(guò)研究發(fā)現(xiàn),函數(shù)address和單元格的ergearea屬性可以獲得合并單元格的準(zhǔn)確信息。詳細(xì)方法為:讀取ells(x,y)單元格時(shí),用address()判斷包含ells(x,y)單元格的合并單元格區(qū)域.ergearea的絕對(duì)地址,假如前4個(gè)字符與ells(x,y)單元格的地址一樣,為ells(x,y)單元格為合并單元格區(qū)域最靠上、靠左的那個(gè)合并單元格,讀取其4條邊信息,否那么不讀齲這樣,徹底防止了重復(fù)讀取,同時(shí)進(jìn)步了整個(gè)讀取和畫(huà)線(xiàn)速度。-在AutAD中,線(xiàn)條有多種,考慮可以方便控制線(xiàn)條屬性,選用了多義線(xiàn)。詳細(xì)命令如下:RetV

8、al=bjet.AddLightEightPlyline(VertiesList)-下面的程序演示表格線(xiàn)條讀取和畫(huà)表格線(xiàn)的詳細(xì)過(guò)程。Subhx()Diaasinterger表格的最大行數(shù)Dibasinterger表格的最大列數(shù)Dixinitasduble插入點(diǎn)x坐標(biāo)Diyinitasduble插入點(diǎn)y坐標(biāo)Dizinitasduble插入點(diǎn)z坐標(biāo)Dixinsertasduble當(dāng)前單元格的左上角點(diǎn)的x左標(biāo)Diyinsertasduble當(dāng)前單元格的左上角點(diǎn)的y左標(biāo)Diptarray(0t2)asdubleDixasintegerDiyasintegerFrx=1taFry=1tbSet=xlsh

9、eet.Range(zh(y)+Tri(Str(x)以行號(hào)、列號(hào)獲得單元格地址Seta=.ergeArea求出單元格的合并單元格地址IfLeft(Tri(a.Address),4)=Tri(.Address)Then假設(shè).ergearea的絕對(duì)地址,假如前4個(gè)字符與單元格的地址一樣xl=A1:+a.Addressxh=xlsheet.Range(a.Address).idthyh=xlsheet.Range(a.Address).HeightSetxlrange=xlsheet.Range(xl)xinsert=xlrange.idth-xhyinsert=xlrange.Height-yhx

10、pint=xinit+xinsertypint=yinit-yinsertIfx=1ThenIfa.Brders(xlEdgeTp).LineStylexlNneThenptArray(0)=xpint第一點(diǎn)坐標(biāo)數(shù)組下標(biāo)0and1)ptArray(1)=ypintptArray(2)=xpint+xh第二點(diǎn)坐標(biāo)數(shù)組下標(biāo)2and3)ptArray(3)=ypintEndIfLineeightlplybj,a.Brders(xlEdgeTp).eightEndIfIfa.Brders(xlEdgeBtt).LineStylexlNneThenptArray(0)=xpint+xh第三點(diǎn)坐標(biāo)數(shù)組下標(biāo)

11、0and1)ptArray(1)=ypint-yhptArray(2)=xpint第四點(diǎn)坐標(biāo)數(shù)組下標(biāo)2and3ptArray(3)=ypintyhLineeightlplybj,a.Brders(xlEdgeBtt).eightEndIfIfy=1ThenIfa.Brders(xlEdgeLeft).LineStylexlNneThenptArray(0)=xpint第四點(diǎn)坐標(biāo)數(shù)組下標(biāo)0and1)ptArray(1)=ypint-yhptArray(2)=xpint第一點(diǎn)坐標(biāo)數(shù)組下標(biāo)2and3)ptArray(3)=ypintEndIfLineeightlplybj,a.Brders(xlEd

12、geLeft).eightEndIfIfa.Brders(xlEdgeRight).LineStylexlNneThenptArray(0)=xpint+xh第二點(diǎn)坐標(biāo)數(shù)組下標(biāo)0and1)ptArray(1)=ypintptArray(2)=xpint+xh第三點(diǎn)坐標(biāo)數(shù)組下標(biāo)2and3ptArray(3)=ypintyhLineeightlplybj,a.Brders(xlEdgeRight).eightEndIfSetlplybj=Spae.AddLighteightPlyline(ptArray)在AutAD文件里畫(huà)線(xiàn)ithlplybj.Layer=nelayer.nae指定lplybj所

13、在圖層.lr=aBlue指定lplybj的顏色EndithLplybj.UpdateNextyNextxEndSub下面程序控制線(xiàn)條粗細(xì)SubLineeight(ByVallineAsbjet,uAsInteger)Seletaseuase1allline.Setidth(0,0.1,0.1)ase2allline.Setidth(0,0.3,0.3)ase-4138allline.Setidth(0,0.5,0.5)ase4allline.Setidth(0,1,1)aseElseallline.Setidth(0,0.1,0.1)EndSeletEndSub下面程序完成列號(hào)轉(zhuǎn)換Funtin

14、zh(ppAsInteger)AsStringIfpp26Thenzh=hr(64+pp)Elsezh=hr(64+Int(pp/26)+hr(64+ppd26)EndIfEndFuntin-3、表格文字轉(zhuǎn)換-表格文字轉(zhuǎn)換包括表格文字本身轉(zhuǎn)換和表格文字在表格中位置的轉(zhuǎn)換兩個(gè)局部。-在AutAD中,文字標(biāo)注的形式有多種,與irsftExel單元格區(qū)域多行文本內(nèi)容相對(duì)應(yīng)的是多行文本命令。AutAD提供的VBA添加多行文本的命令語(yǔ)句是:RetVal=bjet.AddText(InsertinPint,idth,Text)-通過(guò)修改RetVal的屬性可以控制表格文字在表格中的位置。-(1)表格文字本身

15、的轉(zhuǎn)換-分析AddText命令可以得出:表格文字所在位置、文字內(nèi)容寬度,文字內(nèi)容,均可通過(guò)此命令來(lái)添加。然而表格文字字體,大小,下劃線(xiàn)、上下腳標(biāo),傾斜,加粗等卻不能。一般的方法是采用修改字體形文件的方法來(lái)實(shí)現(xiàn),方法煩瑣,不便于實(shí)現(xiàn),而且僅對(duì)修改正形文件的字體有效。況且當(dāng)同一文字塊內(nèi)的不同文字的字體,大小,下劃線(xiàn)、上下腳標(biāo),傾斜,加粗不同時(shí),使用修改字體形文件的方法也無(wú)法實(shí)現(xiàn)。本文介紹一種直接利用text命令提供的方法進(jìn)展轉(zhuǎn)換。-在AddText命令中,影響文字內(nèi)容和文字屬性的參數(shù)Text。在詳細(xì)文字前加上一定的控制符號(hào)可以控制文字的文字屬性,詳細(xì)控制符號(hào)可以參閱AutAD幫助文件。例如,F(xiàn)宋體

16、;Q18;1.2;ABDEFG把“ABDEFG設(shè)置成宋體、向右傾斜18度,每個(gè)字的寬度是正常寬度1.2倍。-本程序詳細(xì)采用的方法是:讀取irsftExel文件某一單元格區(qū)域里的某第j個(gè)字符屬性字體,大小,下劃線(xiàn)、上、下腳標(biāo),傾斜,加粗,讀取irsftExel文件某一單元格區(qū)域里的某第j+1個(gè)字符屬性,假如與第j個(gè)字符一樣,那么二者采用同樣的控制符號(hào);假設(shè)不同,那么從第j+1個(gè)字符開(kāi)場(chǎng),重復(fù)前面的工作。Subz()har=RTri(Left(.haraters.aptin,256)IfharEptyThentextStr=Frj=1TLen(har)If.haraters(j,1).Fnt.Un

17、derline=xlUnderlineStyleNneThenpt=.haraters(j,1).aptinsnstr=FreFntStr(,j)tepstr=Dhilej+1=Len(har)snstr1=FreFntStr(,j+1)Ifsnstr1=snstrThenj=j+1tepstr=tepstr+.haraters(j,1).aptinElseExitDEndIfLptextStr=textStr+snstr+pt+tepstr+Elsept=.haraters(j,1).aptinsnstr=FreFntStr(,j)tepstr=Dhilej+1=Len(har)snstr1

18、=FreFntStr(,j+1)Ifsnstr1=snstrThenj=j+1tepstr=tepstr+.haraters(j,1).aptinElseExitDEndIfLptextStr=textStr+L+snstr+pt+tepstr+lEndIfNextjEndIfEndSub下面函數(shù)控制字體本身屬性FuntinFreFntStr(AsRange,uAsInteger)AsStringa1=F+.haraters(u,1).Fnt.Nae+;字體a2=IIf(.haraters(u,1).Fnt.Supersript=True,H0.33x;A2;,)上腳標(biāo)a3=IIf(.hara

19、ters(u,1).Fnt.Subsript=True,H0.33x;A0;,)下腳標(biāo)a4=IIf(.haraters(u,1).Fnt.FntStyle=傾斜,Q18;,)傾斜a5=IIf(.haraters(u,1).Fnt.FntStyle=加粗,1.2;,)加粗a6=IIf(.haraters(u,1).Fnt.FntStyle=加粗傾斜,1.2;Q18;,)加粗傾斜FreFntStr=a1+a2+a3+a4+a5+a6EndFuntin-2.表格中表格文字位置的轉(zhuǎn)換-對(duì)文字對(duì)象的屬性的直接控制來(lái)實(shí)現(xiàn),通過(guò)ith.endith構(gòu)造可以很容易地控制文字的高度、圖層、顏色、書(shū)寫(xiě)方向。由于t

20、ext文字提供支持的排列位置分為9種,必須根據(jù)irsftExel表格文字的排列方式加以適宜的斷定,然后進(jìn)展轉(zhuǎn)換。其詳細(xì)的實(shí)現(xiàn)方法詳見(jiàn)下面的程序。Subkz()ithtextbj文字對(duì)象.HEight=textHgt.Layer=nelayer.Nae設(shè)置圖層.lr=aRed設(shè)置顏色.DraingDiretin=1設(shè)置書(shū)寫(xiě)方向If(a.VertialAlignent=xlTp_ra.VertialAlignent=xlGeneral)_And(a.HrizntalAlignent=xlLeft_ra.HrizntalAlignent=xlGeneral)_Then.AttahentPint=1a

21、AttahentPintTpLeftIf(a.VertialAlignent=xlTp_ra.VertialAlignent=xlGeneral)_And(a.HrizntalAlignent=xlenter_ra.HrizntalAlignent=xlJustify_ra.HrizntalAlignent=xlDistributed)_Then.AttahentPint=2aAttahentPintTpenterIf(a.VertialAlignent=xlTp_ra.VertialAlignent=xlGeneral)_Anda.HrizntalAlignent=xlRight_Then.

22、AttahentPint=3aAttahentPintTpRightIf(a.VertialAlignent=xlenter_ra.VertialAlignent=xlJustify_ra.VertialAlignent=xlDistributed)_And(a.HrizntalAlignent=xlLeft_ra.HrizntalAlignent=xlGeneral)_Then.AttahentPint=4aAttahentPintiddleLeftIf(a.VertialAlignent=xlenter_ra.VertialAlignent=xlJustify_ra.VertialAlignent=xlDistributed)_And(a.HrizntalAlignent=xlenter_ra.HrizntalAlignent=xlJustify_ra.HrizntalAlignent=xlDistributed)_Then.AttahentPint=5aAttahentPintiddleenterIf(a.VertialAlignent=xlenter_ra.VertialAlignent=xlJustify

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論