QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
6天前
查看: 7544|回复: 7
收起左侧

[已答复] G利用VBA从AUTOCAD中提取文字的问题

[复制链接]
发表于 2010-3-12 14:27:53 | 显示全部楼层 |阅读模式 来自: 中国福建三明

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

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

x
本帖最后由 woaishuijia 于 2012-11-13 06:04 编辑 + y) Q' w( F2 V- c5 M
6 @  t' I4 Z8 w; r/ n$ g* ^
从论坛得到一代码,可实现从AUTOCAD中提取文字至EXCEL,但提取的文字输出到EXCEL后生成的文字顺序与图纸的顺序会有时不同,哪位高手帮看下哪改,可让它按顺序提取
0 l, I7 z' {  ?2 |& E具体代码如下% U5 N3 Q. W6 R
Sub TQ()
* z2 W: H- k( }, j% f) a$ V/ L9 m    On Error Resume Next& \* q% f8 @8 ~' Y
    Dim I As Integer9 [! Z, j  W' T/ l
    Dim E As Excel.Application, B As Workbook, S As Worksheet
& ~* h9 Q& F2 F6 o    Dim SS As AcadSelectionSet, T As Object, FT(3) As Integer, FD(3) As Variant
- E% D, c$ `# P* _" v: S3 r    '下面定义选择集过滤器列表为多行文字或单行文字; ]3 |! h8 H: X4 \4 O
    FT(0) = -4: FD(0) = "<or"
9 c* W" C, k8 A# h4 \9 O! V    FT(1) = 0: FD(1) = "mtext"9 q6 X4 d; j, h! A
    FT(2) = 0: FD(2) = "text"9 y. ?) F* r+ G
    FT(3) = -4: FD(3) = "or>"
7 D2 E! q6 Y- G; T    '创建选择集; K( U0 R0 H; r, I: q+ I# \% A" K& W
    Set SS = ThisDrawing.SelectionSets.Add("SS")
( _7 U2 Y1 e. |    '在屏幕上选择多行文字或单行文字对象. p( g* z/ V* m' [9 x' h  V
    SS.SelectOnScreen FT, FD$ S/ B/ ^+ l: c# k. w) J1 q( H/ h
     '如果选择集不为空则运行以下代码3 m! j* {' J/ _- D7 h/ X' v& e
    If SS.Count > 0 Then
$ J6 J) J0 J  u: v8 w3 L5 v        '运行EXCEL程序
9 ~' C: h9 v5 U; d  K$ n7 y1 F        Set E = New Excel.Application0 g2 v& k+ H" w: ?; v) Y' {1 R
        '在EXCEL中插入工作薄
8 P% d" J( c/ s4 x        Set B = E.Workbooks.Add
( h/ u0 R8 \- Z$ a3 o$ r3 C$ q        '定义工作表& M: W  ?% l) B: c- U
        Set S = B.ActiveSheet
/ q3 I2 r; j6 x6 L3 R        '显示EXCEL程序/ a3 \0 `2 S" t# I
        E.Visible = True
- Q3 M7 b+ K$ \: n+ U         '遍历选择集并处理被选中的单行文字或多行文字对象( o9 L" z; g# M+ Z
        For Each T In SS
! v4 a+ Q! t+ S6 A2 @            I = I + 1* J) B: w! M/ y# |
            '把单行文字或多行文字的内容写入表格( i# P2 m3 d* G* g: J1 z: u
            '对于多行文字,如果直接写入则字符串中很可能包含转义符,使用者可根据需要对字符串运算处理后再写入表格
- }  Z4 g9 ~7 P6 K            S.Cells(I, 1).Value = T.TextString- ]% F0 M6 g) R* |" @% G$ I# m
        Next5 f! Z0 A5 D9 K* w2 f
    End If
6 Q1 A3 W; m! i6 g6 ~! J$ f) a    SS.Delete '删除用过的选择集
- |6 i7 ^1 c2 C, s) z# \End Sub
发表于 2010-3-12 16:16:32 | 显示全部楼层 来自: 中国天津
本帖最后由 woaishuijia 于 2012-11-13 06:00 编辑
6 f6 x( x" i7 c% C, K  l7 T- s6 w; _, w8 R8 Q" e
你说的"顺序"指的是什么呢?电脑可不是神仙,它不可能猜到你的心事的.呵呵,你总得给一个规则出来吧?
 楼主| 发表于 2010-3-14 09:02:14 | 显示全部楼层 来自: 中国福建三明
本帖最后由 fsj 于 2010-3-14 09:10 编辑 4 T, \% r* _1 q* J/ P* d
你说的"顺序"指的是什么呢?电脑可不是神仙,它不可能猜到你的心事的.呵呵,你总得给一个规则出来吧?

# q) e* h$ b: @8 l! Z/ |打个比方,图纸上文本(多个单行文字)的顺序为q a z w s x,利用此提取的文本的顺序可能是a q s x w z,我要得到的是q a z w s x,即与图上的文本顺序一样,你可试提取一下,它生成的文本只能是单列的(如果可以做成多行多列的,则更好)
 楼主| 发表于 2010-3-15 17:38:01 | 显示全部楼层 来自: 中国福建三明
高手们都去打酱油了?
 楼主| 发表于 2010-3-17 12:08:34 | 显示全部楼层 来自: 中国福建三明
高手在哪啊,快来人啊
发表于 2010-3-17 18:22:13 | 显示全部楼层 来自: 中国浙江宁波
本帖最后由 sealive_leafage 于 2010-3-17 18:34 编辑 - K/ x( N2 R" t
- h0 d) B1 i0 I# s( s+ c
如果单纯是功能的上实现,有专门的程序可以下载使用(论坛上就有),如果是在学习VBA,此程序不能按你要的顺序提取的原因是提取顺序跟选择集构建的顺序有关;试试按你要求的顺序单个选择文字对象,而不是使用框选方式选择;如果文字选择有规律可循,如文字的位置,只要在程序里增加文字位置点的判断即可,关键是要有规律,不如像BOM中内容的提取,一行一行的提取;

评分

参与人数 1三维币 +10 收起 理由
woaishuijia + 10 应助

查看全部评分

 楼主| 发表于 2010-3-19 18:37:50 | 显示全部楼层 来自: 中国福建三明
楼上的可否给个链接,我找不到
. E' W  K# }3 n预谢了
发表于 2017-6-16 15:08:36 | 显示全部楼层 来自: 中国天津
论坛里的这个程序大家谁有啊。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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