exceltocad的表格转换.doc_第1页
exceltocad的表格转换.doc_第2页
exceltocad的表格转换.doc_第3页
exceltocad的表格转换.doc_第4页
exceltocad的表格转换.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

EXCEL表格到AUTOCAD表格的转换周文杰 冯若谦 王长伟(大连市交通规划勘查设计院,辽宁 大连 116033)摘 要:Microsoft Excel有制表方便、统计计算快捷准确的优点 ,Autocad在绘图方面有方便实用的特性,在实际工作中,我们探索总结出一种充分发挥两个程序优势,使其更好的为我们工作服务的方法。主要是将Microsoft xcel的表格按照原样转换到Autocad图形中,在Autocad中可以方便地对表格的内容进行编辑修改。具体作法是:利用 Autocad提供的VBA接口程序,将表格线条、表格内容绘制在 Autocad图形中,通过读取Microsoft Excel各单元格四个边框属性和caption属性来确定Autocad中每个格的边框粗细和文字内容。在 Autocad中利用VBA多意线对象命令addlightWeightPolyline绘制表格线框;利用多行文本对象命令xAcadMtet和单行文本对象命令AcadText实现文字的标注。由于多行文本对象可以对文本的单个字符进行控制,因此对于有特殊格式内容的文本,必须采用AcadMtext命令,但是多行文本有对象占用空间大而且运行速度慢的缺点,因此对于所有字符属性相同的文本应采用AcadText命令。关键词:VBA语言Microsoft xcel 工作表 Autocad 图表 转换6引言Autocad(以下简称CAD)和Microsoftxc el (以下简称Excel)是目前工程设计领域使用最广泛的应用软件。CAD是由utoDesk公司出版的工程绘图软件。在工程设计中,对于CAD绘制的工程图都有反映工程数量及材料规格、用量等内容的表格,工程设计中大量的工程量统计、计算及绘制工作非常烦琐,而且极易出现差错。xcel软件是微软公司出版套装ffice办公软件的重要组成部份,xcel具有制表、统计、计算方便快捷等优点,尤其在大量数据的分类汇总、数理统计及函数、公式套用上实现了数据处理的批量化,提高了工程量计算的速度和准确度。 为综合利用两个软件的优点,工程设计中通常在CAD中绘制图形对象,在xcel中对工程量进行统计计算,并把结果以表格形式插入到CAD的图形中,绘制出图表并茂的图形文件。 将xcel表插入到CAD图中是将xcel表格拷贝至剪贴板中,然后打开CAD文件,再将剪贴板中的内容粘贴至CAD中。这种方法十分简单,但缺点是输入到CAD中的表格是图像格式,无法用CAD命令进行编辑。保存文件时必须将Excel文件和 CAD文件保存在一起。如同时插入多个表格,需要占据较大的内存空间,运行速度很慢,给工程图的修改和存档带来了很多的不便之处。利用CAD.0以后版本所提供的VBA接口程序,编制程序将xcel表格按原样转换到CAD中,就能够充分利用两个软件的优点,克服了它们的缺点,该方法为xceltoCAD表格转换,其优点是表格的所有内容都是由CAD的对象组成,可以方便地进行编辑和修改,为使用图形文件带来了很大的方便,而且表格在CAD文件中占用的空间小,不需要依赖其它文件。xceltoCAD表格转换的算法xceltoCAD表格转换程序的基本原理是利用VBA把Excel表格中的文字和线条信息全部读取出来,在CAD文件里按照一一对应的方式写出来,确保转换后的表格与原表格一致。 在Excel中,表对应的对象是工作表(orksheet),表格单元对应的对象是单元格(cell),它可以仅包括一个单元格,也可以是由多个单元格合并而成的单元格。 在CAD中,没有与表对应的对象,但表可以理解为由若干条线和文字对象组合而成。根据上述分析,可以采用如下的转换方法: 读取Excel文件中的最小对象单元格(cell)的主要信息线条和文字,然后在CAD指定的图层、位置画线条,书写文字。通过循环,遍历所有单元格区域,边读边写,最终完成表格的转换。转换过程中,保持线条、文字及其相关属性不发生改变。xceltoCAD表格转换的实现方法 为了获得Excel表格的属性,应该从每个单元格入手,通过读取每个单元格四条边的属性,来确定表格的形式,通过读取每个单元格的文本属性,来确定表格的内容。3.1表格线条的转换 在获取表格信息时,为了避免重复读取边的信息,采用如下方法。假设表格由行列组成,为循环变量。当时读取上边;当时读取左边,其余情况读取右边、下边。 对合并单元格,由于表格行号、列号有间断,不连续,无法进行循环读取信息。 通过函数Address和单元格的Mergearea属性可以获得合并单元格的准确信息。具体方法为:读取cells(x,y)单元格时,用address判断包含cells(x,y)单元格的合并单元格区域mergearea的绝对地址,如果前个字符与cells(x,y)单元格的地址相同,则cells(x,y)单元格为合并单元格区域最靠上、靠左的那个合并单元格,读取其条边信息,否则不读取。这样,彻底避免了重复读取,同时提高了整个读取和画线速度。 根据以上算法,提取xcel表格中横向线、竖向线的属性,通过判断单元格有无合并,不断后移横向线、竖向线的起终点坐标在CAD中进行线条的绘制,遍历工作表的所有单元格,在CAD中绘制表格的横向线和竖向线。在CAD中,线条有多种,考虑能够方便控制线条属性,选用了多意线。具体命令如下:AcadlineObjthisdrawing.modelspace.addlight _WeightPolyline(VerticeList)3.2表格文字转换表格文字转换包括表格文字本身转换和表格文字在表格中位置的转换两个部分。 3.2.1表格文字本身的转换表格的文字内容是通过方访问cell的Caption和Value属性来实现的,对于cell的文本内容为纯文本的单元格,用Caption属性进行提取,对于cell的文本内容为数字(包括通过计算所得)的单元格,用Value的属性提取。由于AcadText不能单独控制每个字符的属性,而AcadMtext占用空间较大且运行慢,因此表格文字的转换采用AcadMtext和AcadText两种方法。对于单元格中的字符属性完全相同的文本采用AcadText的方法。而对于表格文字有下划线、上下脚标,倾斜,加粗等特殊形式的文本必需采用AcadMtext形式进行标注。在AcadMtext命令中,影响字符内容和字符属性的参数很多。在具体文字前加上一定的控制符号可以控制文本的文字属性,具体控制符号可以参阅ACAD的帮助文件。例如,F(宋体;Q18“W1.2“ABC”把“ABC”设置成宋体、向右倾斜18度,每个字的宽度是正常宽度1.2倍。具体的处理方法是读取Excel文件某一单元格区域里的某第个字符属性(字体、大小、换行符、下划线、上下脚标,倾斜,加粗),读取Excel文件某一单元格区域里的某第个字符属性,如果与第个字符相同,则二者采用同样的控制符号;若不同,则从第个字符开始,重复前面的工作。AcadMtext以及AcadText的具体命令如下:AcadMtextObjthisdrawing.modelspace.addMtext _(Insertpoint,Width,Text)AcadTextObjthisdrawing.modelspace.addtext _(Text,insertpoint,height)3.2.2表格中表格文字位置的转换 text文字提供支持的排列位置分有种,必须根据Excel表格文字的排列方式加以合适的判定,然后再进行转换。对于Text文字则需要通过acadTexeObj的Move方法来实现。xceltoCAD表格转换程序使用xceltoCAD表格转换程序是利用VBA基于CAD开发的xcel表到CAD表格的转换程序,通常利用xcel的计算和制表功能,制定好xcel表格,再使用该程序按原样转换到CAD中,主要的操作步骤是:点击xceltoCAD表格转换按纽,在窗口中按照提示输入Excel文件名称以及sheet表名称,并选择相应的比例系数,单击窗口中的确定按钮即可在CAD中完成xcel表格的绘制。xceltoCAD表格转换程序特点 该程序可将表格中的所有单元格全部按原来大小、风格转换到CAD文件中。在转换过程中。本程序采用isual Basic编制,该程序在Excel2000和Cad2002环境下调试通过。程序经过试用,已是工程技术人员制图中最常用的绘图计算工具之一。6程序的编制和运行 在Acad的工具菜单中的宏命令中启动VBA管理器,输入原代码并进行调试即可运行,主要的代码如下:表格线条读取和画表格线的过程如下: Sub drawline() Dim a as interger 表格的最大行数 Dim b as interger 表格的最大列数 Dim xinit as double 插入点x坐标 Dim yinit as double 插入点y坐标 Dim zinit as double 插入点z坐标 Dim excel_app As ObjectDim xinsert as double当前单元格的左上角点的x左标 Dim yinsert as double当前单元格的左上角点的y左标 Dim ptarray (0 to 2) as double Dim x as integer Dim y as integer For x =1 to a For y=1 to b Set c = xlsheet.Range(zh(y) + Trim(Str(x) _以行号、列号获得单元格地址 Set ma = c.MergeArea _求出单元格C的合并单元格地址 If Left(Trim(ma.Address),4)=Trim(c.Addr ess)Then xl = A1: + ma.Address xh = xlsheet.Range(ma.Address).Width yh = xlsheet.Range(ma.Address).Height Set xlrange = xlsheet.Range(xl) xinsert = xlrange.Width - xh yinsert = xlrange.Height - yh xpoint = xinit + xinsert ypoint = yinit - yinsert If x = 1 Then If ma.Borders(xlEdgeTop).LineStylexlNone Then ptArray(0) = xpoint 第一点坐标(数组下标 0 and 1) ptArray(1) = ypoint ptArray(2) = xpoint+xh第二点坐标(数组下标 2 and 3) ptArray(3) = ypoint End If End If If ma.Borders(xlEdgeBottom).LineStylexlNone _then ptArray(0) = xpoint + xh 第三点坐标(数组下标 0 and 1) ptArray(1) = ypoint - yh ptArray(2) = xpoint 第四点坐标(数组下标 2 and 3) ptArray(3) = ypoint yh End If If y = 1 Then If ma.Borders(xlEdgeLeft).LineStyle xlNone _Then ptArray(0) = xpoint 第四点坐标(数组下标 0 and 1) ptArray(1) = ypoint - yh ptArray(2) = xpoint 第一点坐标(数组下标 2 and 3) ptArray(3) = ypoint End If End If If ma.Borders(xlEdgeRight).LineStyle xlNone _Then ptArray(0) = xpoint + xh 第二点坐标(数_组下标 0 _and 1) ptArray(1) = ypoint ptArray(2) = xpoint + xh 第三点坐标(数组下标 2 _and 3) ptArray(3) = ypoint yh End If Set lwployobj=moSpace.AddLightWeight Polyline _ (ptArray) 在CAD文件里画线 With lwployobj.Layer = _ 指定所在图层 .Color = acBlue 指定lwployobj的颜色 End With Lwployobj.Update Next y Next x End Sub 列号转换的程序如下: Function zh(pp As Integer) As String If pp 26 Then zh = Chr(64 + pp) Else zh = Chr(64 + Int(pp / 26) + Chr(64 + pp Mod 26) End If End Function 文本信息读取和在CAD中写字的过程如下: Private Sub acadtext()Dim amtext As AcadMTextDim atext As AcadTextDim cpt As VariantDim sonstr As StringDim sonstr1 As StringDim textvar As BooleanThisDrawing.Layers.Add (text) _ 在CAD中添加“text”层ThisDrawing.Layers.Add (mtext) _在CAD中添加“mtext”层fontsize = .cells(x, y).Font.Sizechar=RTrim(Left(c.Characters.Captio_n , _256)On Error GoTo textisnumberIf char Empty Then 判断单元格中字符串是否每个字符的格式都是一样的sonstr = forefontstr(c, 1)textvar = True For jj = 1 To Len(Trim(char)Do While jj + 1 = Len(Trim(char)sonstr1 = forefontstr(c, jj + 1)If sonstr1 sonstr Thentextvar = False mtextExit ForElseEnd Ifjj = jj + 1LoopNext jj用Acadtext命令进行标注 textbase(0) = ptarray(0) - xh / 2textbase(1) = ptarray(1) - yh / 2textbase(2) = 0textstr = Trim(c.Value)textstr = Trim(textstr)set atext =ThisDrawing.ModeSpace.AddText (textstr, textbase, yh * 0.8)atext.Layer = textatext.Color = acCyanatext.Alignment=acAlignmentMiddleCentertemptextbase(0) = 0temptextbase(1) = 0temptextbase(2) = 0atext.ScaleFactor = 0.65atext.Updateatext.Move temptextbase, textbaseelse textstr = 用 AcadMtext进行标注 For j = 1 To Len(char)If c.Characters(j,1).Font.Underline= xlUnder _lineStyleNone Thencpt = c.Characters(j, 1).Captionsonstr = forefontstr(c, j)tempstr = Do While j + 1 = Len(char)sonstr1 = forefontstr(c, j + 1)If sonstr1 = sonstr Thenj = j + 1tempstr = tempstr + c.Characters(j, 1).CaptionElseExit DoEnd IfLooptextstr = textstr + + sonstr + cpt + tempstr _+ Elsecpt = c.Characters(j, 1).Captionsonstr = forefontstr(c, j)tempstr = Do While j + 1 = Len(char)sonstr1 = forefontstr(c, j + 1)If sonstr1 = sonstr Thenj = j + 1tempstr = tempstr + c.Characters(j, 1).CaptionElseExit DoEnd IfLooptextstr = textstr + L + sonstr + cpt + _tempstr + lEnd IfNext jtextbase(0) = ptarray(0) - xh / 2textbase(1) = ptarray(1) - yh / 2textbase(2) = 0Set amtext=ThisDrawing.Model Space. Add _MText(textbase, xh, textstr)With amtext 多行文字对象.Color = acRed 设置颜色.height = fontsize.InsertionPoint = textbaseEnd Withamtext.Layer = mtextamtext.UpdateElseEnd IfEnd IfElsetextstr = End IfEnd With控制字体本身属性的过程如下:Function forefontstr(m As Range, u As Integer) As _StringDim a1 As String, a2 As String, a3 As String, a4 As _String, a5 As String, a6 As Stringa1 = F + m.Characters(u, 1).Font.Name + ; 字_体a2 = IIf(m.Characters(u, 1).Font.Super script = 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;, W0.75;) 加粗a6 = IIf(m.Characters(u, 1).Font.FontStyle = 加粗 _倾斜, W1.2;Q18;, W0.75;) 加粗倾斜forefontstr = a1 + a2 + a3 + a4 + a5 + a6End Function由于篇幅有限,有一些细节不能详细叙述,如果对该程序感兴趣希望与作者联系。Transforming Excel Form into Autocad FormAbstract: As Microsoft Excel has the advantages of the convenient form-making, the quick- and- exact statistical and calculating functions; and Autocad has the property of the convenient and practical drawing, in the course of practical work, we have studied and summarized a way that gives full play to these two programs, which are made to serve us better. Mainly,the forms of Excel are transformed as its original ones to the graphs of AutoCAD, in which the contents of the forms can be edited and amended conveniently. The concrete operations are as below: to use the VBA connection program offered by AutoCAD, to draw the lines and contents of the forms in the grap

温馨提示

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

评论

0/150

提交评论