找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 836|回复: 1

[LISP程序]:換一種思路實現利用VBA编程实现从EXCEL表到AUTOCAD表转换

[复制链接]
发表于 2005-11-8 20:01:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
利用VBA编程实现从EXCEL表到AUTOCAD表转换
-- 3、表格文字转换

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

---- 在AutoCAD中,文字标注的形式有多种,与Microsoft Excel 单元格区域多行文本内容相对应的是多行文本命令。AutoCAD提供的VBA添加多行文本的命令语句是:

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

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

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

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

---- 在AddMText命令中,影响文字内容和文字属性的参数Text。在具体文字前加上一定的控制符号可以控制文字的文字属性,具体控制符号可以参阅AutoCAD帮助文件。例如,{\F宋体;\Q18;\W1.2;ABCDEFG}把“ABCDEFG”设置成宋体、向右倾斜18度,每个字的宽度是正常宽度1.2倍。

---- 本程序具体采用的方法是:读取Microsoft Excel文件某一单元格区域里的某第j个字符属性(字体,大小,下划线、上、下脚标,倾斜,加粗),读取Microsoft Excel文件某一单元格区域里的某第j+1个字符属性,如果与第j个字符相同,则二者采用同样的控制符号;若不同,则从第j+1个字符开始,重复前面的工作。

Sub wz (  )
Char = RTrim(Left(c.Characters.Caption, 256))
If Char < > Empty Then
   textStr = ""
   For j = 1 To Len(Char)
  If c.Characters(j, 1).Font.Underline =
         xlUnderlineStyleNone Then
          cpt = c.Characters(j, 1).Caption
          sonstr = ForeFontStr(c, j)
          tempstr = ""
          Do While j + 1 < = Len(Char)
               sonstr1 = ForeFontStr(c, j + 1)
               If sonstr1 = sonstr Then
                  j = j + 1
                  tempstr = tempstr + c.Characters(j,
        1).Caption
               Else
                  Exit Do
               End If
          Loop
          textStr = textStr + "{" + sonstr + cpt
         + tempstr + "}"
      Else
          cpt = c.Characters(j, 1).Caption
          sonstr = ForeFontStr(c, j)
          tempstr = ""
          Do While j + 1 < = Len(Char)
              sonstr1 = ForeFontStr(c, j + 1)
              If sonstr1 = sonstr Then
                 j = j + 1
                 tempstr = tempstr + c.Characters(j,
         1).Caption
              Else
                 Exit Do
              End If
       Loop
           textStr = textStr + "{\L" +
           sonstr + cpt + tempstr + "\l}"
       End If
   Next j
End If
End Sub   
‘下面函数控制字体本身属性
Function ForeFontStr(m As Range, u As Integer) As String
    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
End Function

---- (2).表格中表格文字位置的转换

---- 对文字对象的属性的直接控制来实现,通过with….end with 结构可以很容易地控制文字的高度、图层、颜色、书写方向。由于Mtext文字提供支持的排列位置分为9种,必须根据Microsoft Excel表格文字的排列方式加以合适的判定,然后进行转换。其具体的实现方法详见下面的程序。

Sub kz( )
With textObj ‘文字对象
    .Height = textHgt
    .Layer = newlayer.Name  ‘设置图层
    .Color = acRed          ‘设置颜色
    .DrawingDirection = 1    ‘设置书写方向
   If (ma.VerticalAlignment = xlTop _
       Or ma.VerticalAlignment = xlGeneral) _
       And (ma.HorizontalAlignment = xlLeft _
       Or ma.HorizontalAlignment = xlGeneral) _
       Then .AttachmentPoint = 1  'acAttachmentPointTopLeft
   If (ma.VerticalAlignment = xlTop _
       Or ma.VerticalAlignment = xlGeneral) _
       And (ma.HorizontalAlignment = xlCenter _
       Or ma.HorizontalAlignment = xlJustify _
       Or ma.HorizontalAlignment = xlDistributed) _
       Then .AttachmentPoint = 2  'acAttachmentPointTopCenter
   If (ma.VerticalAlignment = xlTop _
       Or ma.VerticalAlignment = xlGeneral) _
       And ma.HorizontalAlignment = xlRight _
       Then .AttachmentPoint = 3  'acAttachmentPointTopRight
   If (ma.VerticalAlignment = xlCenter _
       Or ma.VerticalAlignment = xlJustify _
       Or ma.VerticalAlignment = xlDistributed) _
       And (ma.HorizontalAlignment = xlLeft _
       Or ma.HorizontalAlignment = xlGeneral) _
       Then .AttachmentPoint = 4  'acAttachmentPointMiddleLeft
   If (ma.VerticalAlignment = xlCenter _
       Or ma.VerticalAlignment = xlJustify _
       Or ma.VerticalAlignment = xlDistributed) _
       And (ma.HorizontalAlignment = xlCenter _
       Or ma.HorizontalAlignment = xlJustify _
       Or ma.HorizontalAlignment = xlDistributed) _
       Then .AttachmentPoint = 5  'acAttachmentPointMiddleCenter
   If (ma.VerticalAlignment = xlCenter _
       Or ma.VerticalAlignment = xlJustify _
       Or ma.VerticalAlignment = xlDistributed) _
       And ma.HorizontalAlignment = xlRight _
       Then .AttachmentPoint = 6 'acAttachmentPointMiddleRight
   If ma.VerticalAlignment = xlBottom _
       And (ma.HorizontalAlignment = xlLeft _
       Or ma.HorizontalAlignment = xlGeneral) _
       Then .AttachmentPoint = 7  'acAttachmentPointBottomLeft
  If ma.VerticalAlignment = xlBottom _
       And (ma.HorizontalAlignment = xlCenter _
       Or ma.HorizontalAlignment = xlJustify _
       Or ma.HorizontalAlignment = xlDistributed) _
       Then .AttachmentPoint = 8  'acAttachmentPointBottomCenter
  If ma.VerticalAlignment = xlBottom _
       And ma.HorizontalAlignment = xlRight _
       Then .AttachmentPoint = 9  'acAttachmentPointBottomRight
End With
textObj.Update
End Sub

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

---- 该程序可将Excel表格中的所有单元格全部按原来大小、风格转换到AutoCAD文件中来。在转换过程中,表格线条的转换和文字转换是重点。文字转换采用了直接利用AddMtext命令提供的属性进行转换,避免了已往修改形文件来进行文字标注的方法,直接控制表格文字字体、大小、下划线、上下脚标,倾斜,加粗等,使每个文字的风格均可以得到很好的控制,极大提高了文字标注的灵活性。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-11-13 15:44:13 | 显示全部楼层
Function ForeFontStr(m As Range, u As Integer) As String
显示没有该数据类型

估计是range类型CAD不能识别
请问怎么解决才能用上你的程序。谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-23 10:57 , Processed in 0.389723 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表