利用VBA编程实现从EXCEL表到AUTOCAD表转换doc221.docx

上传人:b****3 文档编号:11266234 上传时间:2023-05-30 格式:DOCX 页数:13 大小:20.11KB
下载 相关 举报
利用VBA编程实现从EXCEL表到AUTOCAD表转换doc221.docx_第1页
第1页 / 共13页
利用VBA编程实现从EXCEL表到AUTOCAD表转换doc221.docx_第2页
第2页 / 共13页
利用VBA编程实现从EXCEL表到AUTOCAD表转换doc221.docx_第3页
第3页 / 共13页
利用VBA编程实现从EXCEL表到AUTOCAD表转换doc221.docx_第4页
第4页 / 共13页
利用VBA编程实现从EXCEL表到AUTOCAD表转换doc221.docx_第5页
第5页 / 共13页
利用VBA编程实现从EXCEL表到AUTOCAD表转换doc221.docx_第6页
第6页 / 共13页
利用VBA编程实现从EXCEL表到AUTOCAD表转换doc221.docx_第7页
第7页 / 共13页
利用VBA编程实现从EXCEL表到AUTOCAD表转换doc221.docx_第8页
第8页 / 共13页
利用VBA编程实现从EXCEL表到AUTOCAD表转换doc221.docx_第9页
第9页 / 共13页
利用VBA编程实现从EXCEL表到AUTOCAD表转换doc221.docx_第10页
第10页 / 共13页
利用VBA编程实现从EXCEL表到AUTOCAD表转换doc221.docx_第11页
第11页 / 共13页
利用VBA编程实现从EXCEL表到AUTOCAD表转换doc221.docx_第12页
第12页 / 共13页
利用VBA编程实现从EXCEL表到AUTOCAD表转换doc221.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

利用VBA编程实现从EXCEL表到AUTOCAD表转换doc221.docx

《利用VBA编程实现从EXCEL表到AUTOCAD表转换doc221.docx》由会员分享,可在线阅读,更多相关《利用VBA编程实现从EXCEL表到AUTOCAD表转换doc221.docx(13页珍藏版)》请在冰点文库上搜索。

利用VBA编程实现从EXCEL表到AUTOCAD表转换doc221.docx

利用VBA编程实现从EXCEL表到AUTOCAD表转换doc221

利用VBA编程实现从EXCEL表到AUTOCAD表转换

 

摘要:

该程序可将Excel表格中的所有单元格全部按原来大小、风格转换到AutoCAD文件中来。

在转换过程中,表格线条的转换和文字转换是重点。

文字转换采用了直接利用AddMtext命令提供的属性进行转换,防止了已往修改形文件来进行文字标注的方法,直接控制表格文字字体、大小、下划线、上下脚标,倾斜,加粗等,使每个文字的风格均可以得到很好的控制,极大提高了文字标注的灵活性。

关键词:

计算机

----一、前言

----MicrosoftExcel软件具有十分强大的制表、表格计算等功能,是普通人员常用的制表工具。

可以通过其内嵌的VBA语言可以控制MicrosoftExcel的整个操作过程。

----AutoCAD是由AutoDesk公司的工程绘图软件,是CAD市场的主流产品,功能十分强大,是工程制图人员常用的软件之一。

AutoDesk公司从R14版以后,为其提供了VBA语言接口。

----在工程制图中,常常需要在图中插入绘制表格,一般有两种方法。

其一,是利用剪贴板,将MicrosoftExcel表格拷贝至剪贴板中,然后翻开AutoCAD文件,再将剪贴板中的文件粘贴至所需位置。

这种方法十分简单,但有其固有的缺点。

①在保存文件必须将.xls和.dwg文件保存在一起,一旦缺少excel环境,那么再对表格继续修改。

②同时翻开多个表格操作,需要占据较大的内存空间。

③文件体积变得很大,表格有时在.dwg文件中以图标形式显示,不便于观察。

----第二种方法,即利用MicrosoftExcel、AutoCAD都提供的VBA功能,编制程序进行转换,将MicrosoftExcel表格按原来样子转换,即把MicrosoftExcel表格中的文字和线条信息全部读取出来,在AutoCAD文件里按照一一对应的方式写出来,确保转换后的表格与原表格一致。

这样彻底防止了前种方法的缺点,便于表格内容编辑。

本文着重介绍此方法。

----二、表格转换工作机理分析及具体实现方法

----1.表格转换工作机理分析

----在制表过程中,经常遇到两个概念,表和方格。

----在MicrosoftExcel中,与表对应的对象是工作表〔Sheet或Worksheet〕,与每一个表格方格相对应的对象是单元格区域〔range〕,它可以仅包括一个单元格〔cell〕,也可以由多个单元格合并而成。

----在AutoCAD中,没有与表对应的对象,但表可以理解由假设干条线和文字对象组合而成。

----根据上述分析,可以发现如下的转换方法:

----读取MicrosoftExcel文件中的最小对象----单元格区域(range)的主要信息---线条和文字,然后在AutoCAD文件里在指定图层、位置画线条,书写文字。

通过循环,遍历所有单元格区域(range),边读边写,最终完成表格的转换。

转换过程中,保持线条、文字及其相关属性不发生改变。

----下面就转换工作的两个主要对象表格线条和表格文字进行讨论。

----2、表格线条的转换

----MicrosoftExcel中内嵌的VBA为我们获取Excel文件信息提供了极大便利。

通常,通过访问range对象,可以获得许多信息。

访问分析表格的属性应从分析range开始。

每一个range包括许多对象和属性,例如,font对象可以返回range的字体信息。

通过遍历,即可获得整个表格信息。

获取表格信息的目的在于准确地按照位置画表格线,同时确定文字位置。

----在获取表格信息时,存在一个最正确算法问题。

以下就画线问题为例,说明问题和解决方法。

----假设表格由a(a>=1)行b(b>=1)列组成,x,y为循环变量,表格完全由单元格组成,由于在每个单元格都有4条边,让x从1开始循环到a,再y从1开始循环到b,读取每个单元格的4条边,会读取a*b*4次,重复读取a*b*2次。

当x=1时,读取上边;当y=1时读取,左边,其余情况读取右边,下边。

共读取a+b+a*b*2次。

以3行4列为例,共读取3+4+3*4*2=31次,与实际表格的边数相同,没有重复读取。

----对合并单元格信息的读取是个难点。

因为如果按照单元格的位置依次读取,那么由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)单元格的合并单元格区域的绝对地址,如果前4个字符与cells(x,y)单元格的地址相同,为cells(x,y)单元格为合并单元格区域最靠上、靠左的那个合并单元格,读取其4条边信息,否那么不读取。

这样,彻底防止了重复读取,同时提高了整个读取和画线速度。

----在AutoCAD中,线条有多种,考虑能够方便控制线条属性,选用了多义线。

具体命令如下:

RetVal=object.AddLightWeightPolyline(VerticesList)

----下面的程序演示表格线条读取和画表格线的具体过程。

Subhxw()

Dimaasinterger‘表格的最大行数

Dimbasinterger‘表格的最大列数

Dimxinitasdouble‘插入点x坐标

Dimyinitasdouble‘插入点y坐标

Dimzinitasdouble‘插入点z坐标

Dimxinsertasdouble‘当前单元格的左上角点的x左标

Dimyinsertasdouble’当前单元格的左上角点的y左标

Dimptarray(0to2)asdouble

Dimxasinteger

Dimyasinteger

Forx=1toa

Fory=1tob

Setc=xlsheet.Range(zh(y)+Trim(Str(x)))

‘以行号、列号获得单元格地址

Setma=c.MergeArea

‘求出单元格C的合并单元格地址

IfLeft(Trim(ma.Address),4)=Trim(c.Address)Then

假设的绝对地址,如果前4个字符与c单元格的地址相同

xl="A1:

"+ma.Address

xh=xlsheet.Range(ma.Address).Width

yh=xlsheet.Range(ma.Address).Height

Setxlrange=xlsheet.Range(xl)

xinsert=xlrange.Width-xh

yinsert=xlrange.Height-yh

xpoint=xinit+xinsert

ypoint=yinit-yinsert

Ifx=1Then

Ifma.Borders(xlEdgeTop).LineStyle

<>xlNoneThen

ptArray(0)=xpoint

‘第一点坐标〔数组下标0and1)

ptArray

(1)=ypoint

ptArray

(2)=xpoint+xh

‘第二点坐标〔数组下标2and3)

ptArray(3)=ypoint

EndIf

Lineweightlwployobj,ma.Borders(xlEdgeTop).Weight

EndIf

Ifma.Borders(xlEdgeBottom).LineStyle

<>xlNoneThen

ptArray(0)=xpoint+xh

‘第三点坐标〔数组下标0and1)

ptArray

(1)=ypoint-yh

ptArray

(2)=xpoint

‘第四点坐标〔数组下标2and3〕

ptArray(3)=ypoint–yh

Lineweightlwployobj,

ma.Borders(xlEdgeBottom).Weight

EndIf

Ify=1Then

Ifma.Borders(xlEdgeLeft).LineStyle

<>xlNoneThen

ptArray(0)=xpoint

‘第四点坐标〔数组下标0and1)

ptArray

(1)=ypoint-yh

ptArray

(2)=xpoint

‘第一点坐标〔数组下标2and3)

ptArray(3)=ypoint

EndIf

Lineweightlwployobj,ma.Borders(xlEdgeLeft).Weight

EndIf

Ifma.Borders(xlEdgeRight).LineStyle

<>xlNoneThen

ptArray(0)=xpoint+xh

‘第二点坐标〔数组下标0and1)

ptArray

(1)=ypoint

ptArray

(2)=xpoint+xh

‘第三点坐标〔数组下标2and3〕

ptArray(3)=ypoint–yh

Lineweightlwployobj,

ma.Borders(xlEdgeRight).Weight

EndIf

Setlwployobj=moSpace.AddLightWeightPolyline(ptArray)

‘在AutoCAD文件里画线

Withlwployobj

.Layer=newlayer.name‘指定lwployobj所在图层

.Color=acBlue‘指定lwployobj的颜色

EndWith

Lwployobj.Update

Nexty

Nextx

EndSub

‘下面程序控制线条粗细

SubLineweight(ByVallineAsObject,uAsInteger)

SelectCaseu

Case1

Callline.SetWidth(0,0.1,0.1)

Case2

Callline.SetWidth(0,0.3,0.3)

Case-4138

Callline.SetWidth(0,0.5,0.5)

Case4

Callline.SetWidth(0,1,1)

CaseElse

Callline.SetWidth(0,0.1,0.1)

EndSelect

EndSub

‘下面程序完成列号转换

Functionzh(ppAsInteger)AsString

Ifpp<26Then

zh=Chr(64+pp)

Else

zh=Chr(64+Int(pp/26))+Chr(64+ppMod26)

EndIf

EndFunction

----3、表格文字转换

----表格文字转换包括表格文字本身转换和表格文字在表格中位置的转换两个局部。

----在AutoCAD中,文字标注的形式有多种,与MicrosoftExcel单元格区域多行文本内容相对应的是多行文本命令。

AutoCAD提供的VBA添加多行文本的命令语句是:

RetVal=object.AddMText(InsertionPoint,Width,Text)

----通过修改RetVal的属性可以控制表格文字在表格中的位置。

----

(1).表格文字本身的转换

----分析AddMText命令可以得出:

表格文字所在位置、文字内容宽度,文字内容,均可通过此命令来添加。

然而表格文字字体,大小,下划线、上下脚标,倾斜,加粗等却不能。

一般的方法是采用修改字体形文件的方法来实现,方法烦琐,不便于实现,而且仅对修改正形文件的字体有效。

况且当同一文字块内的不同文字的字体,大小,下划线、上下脚标,倾斜,加粗不同时,使用修改字体形文件的方法也无法实现。

本文介绍一种直接利用Mtext命令提供的方法进行转换。

----在AddMText命令中,影响文字内容和文字属性的参数Text。

在具体文字前加上一定的控制符号可以控制文字的文字属性,具体控制符号可以参阅AutoCAD帮助文件。

例如,{\F宋体;\Q18;\W1.2;ABCDEFG}把“ABCDEFG〞设置成宋体、向右倾斜18度,每个字的宽度是正常宽度倍。

----本程序具体采用的方法是:

读取MicrosoftExcel文件某一单元格区域里的某第j个字符属性〔字体,大小,下划线、上、下脚标,倾斜,加粗〕,读取MicrosoftExcel文件某一单元格区域里的某第j+1个字符属性,如果与第j个字符相同,那么二者采用同样的控制符号;假设不同,那么从第j+1个字符开始,重复前面的工作。

Subwz()

Char=RTrim(Left(c.Characters.Caption,256))

IfChar<>EmptyThen

textStr=""

Forj=1ToLen(Char)

Ifc.Characters(j,1).Font.Underline=

xlUnderlineStyleNoneThen

cpt=c.Characters(j,1).Caption

sonstr=ForeFontStr(c,j)

tempstr=""

DoWhilej+1<=Len(Char)

sonstr1=ForeFontStr(c,j+1)

Ifsonstr1=sonstrThen

j=j+1

tempstr=tempstr+c.Characters(j,

1).Caption

Else

ExitDo

EndIf

Loop

textStr=textStr+"{"+sonstr+cpt

+tempstr+"}"

Else

cpt=c.Characters(j,1).Caption

sonstr=ForeFontStr(c,j)

tempstr=""

DoWhilej+1<=Len(Char)

sonstr1=ForeFontStr(c,j+1)

Ifsonstr1=sonstrThen

j=j+1

tempstr=tempstr+c.Characters(j,

1).Caption

Else

ExitDo

EndIf

Loop

textStr=textStr+"{\L"+

sonstr+cpt+tempstr+"\l}"

EndIf

Nextj

EndIf

EndSub

‘下面函数控制字体本身属性

FunctionForeFontStr(mAsRange,uAsInteger)AsString

a1="\F"+m.Characters(u,1).Font.Name+";"‘字体

a2=IIf(m.Characters(u,1).Font.Superscript=

True,"\H0.33x;\A2;","")'上脚标

a3=IIf(m.Characters(u,1).Font.Subscript=

True,"\H0.33x;\A0;","")'下脚标

a4=IIf(m.Characters(u,1).Font.FontStyle=

"倾斜","\Q18;","")'倾斜

a5=IIf(m.Characters(u,1).Font.FontStyle=

"加粗","\W1.2;","")'加粗

a6=IIf(m.Characters(u,1).Font.FontStyle=

"加粗倾斜","\W1.2;\Q18;","")'加粗倾斜

ForeFontStr=a1+a2+a3+a4+a5+a6

EndFunction

----〔2〕.表格中表格文字位置的转换

----对文字对象的属性的直接控制来实现,通过with….endwith结构可以很容易地控制文字的高度、图层、颜色、书写方向。

由于Mtext文字提供支持的排列位置分为9种,必须根据MicrosoftExcel表格文字的排列方式加以适宜的判定,然后进行转换。

其具体的实现方法详见下面的程序。

Subkz()

WithtextObj‘文字对象

.Height=textHgt

.Layer=newlayer.Name‘设置图层

.Color=acRed‘设置颜色

.DrawingDirection=1‘设置书写方向

If(ma.VerticalAlignment=xlTop_

Orma.VerticalAlignment=xlGeneral)_

And(ma.HorizontalAlignment=xlLeft_

Orma.HorizontalAlignment=xlGeneral)_

Then.AttachmentPoint=1'acAttachmentPointTopLeft

If(ma.VerticalAlignment=xlTop_

Orma.VerticalAlignment=xlGeneral)_

And(ma.HorizontalAlignment=xlCenter_

Orma.HorizontalAlignment=xlJustify_

Orma.HorizontalAlignment=xlDistributed)_

Then.AttachmentPoint=2'acAttachmentPointTopCenter

If(ma.VerticalAlignment=xlTop_

Orma.VerticalAlignment=xlGeneral)_

Andma.HorizontalAlignment=xlRight_

Then.AttachmentPoint=3'acAttachmentPointTopRight

If(ma.VerticalAlignment=xlCenter_

Orma.VerticalAlignment=xlJustify_

Orma.VerticalAlignment=xlDistributed)_

And(ma.HorizontalAlignment=xlLeft_

Orma.HorizontalAlignment=xlGeneral)_

Then.AttachmentPoint=4'acAttachmentPointMiddleLeft

If(ma.VerticalAlignment=xlCenter_

Orma.VerticalAlignment=xlJustify_

Orma.VerticalAlignment=xlDistributed)_

And(ma.HorizontalAlignment=xlCenter_

Orma.HorizontalAlignment=xlJustify_

Orma.HorizontalAlignment=xlDistributed)_

Then.AttachmentPoint=5'acAttachmentPointMiddleCenter

If(ma.VerticalAlignment=xlCenter_

Orma.VerticalAlignment=xlJustify_

Orma.VerticalAlignment=xlDistributed)_

Andma.HorizontalAlignment=xlRight_

Then.AttachmentPoint=6'acAttachmentPointMiddleRight

Ifma.VerticalAlignment=xlBottom_

And(ma.HorizontalAlignment=xlLeft_

Orma.HorizontalAlignment=xlGeneral)_

Then.AttachmentPoint=7'acAttachmentPointBottomLeft

Ifma.VerticalAlignment=xlBottom_

And(ma.HorizontalAlignment=xlCenter_

Orma.HorizontalAlignment=xlJustify_

Orma.HorizontalAlignment=xlDistributed)_

Then.AttachmentPoint=8'acAttachmentPointBottomCenter

Ifma.VerticalAlignment=xlBottom_

Andma.HorizontalAlignment=xlRight_

Then.AttachmentPoint=9'acAttachmentPointBottomRight

EndWith

textObj.Update

EndSub

----三、功能与特点介绍

----该程序可将Excel表格中的所有单元格全部按原来大小、风格转换到AutoCAD文件中来。

在转换过程中,表格线条的转换和文字转换是重点。

文字转换采用了直接利用AddMtext命令提供的属性进行转换,防止了已往修改形文件来进行文字标注的方法,直接控制表格文字字体、大小、下划线、上下脚标,倾斜,加粗等,使每个文字的风格均可以得到很好的控制,极大提高了文字标注的灵活性。

----本程序采用VisualBASIC编制,需要MicrosoftExcel2000和AutoCA

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 哲学历史

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2