乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 141|回复: 19

[编程交流] Auto cad-->excel

[复制链接]

1

主题

8

帖子

7

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 21:48:18 | 显示全部楼层 |阅读模式
你好
我需要帮助。那么,如何自动获取excel工作表中的多段线长度/面积。。
 
因为,当我通过多段线测量面积/长度时,我必须从列表中复制并手动粘贴到excel单元格。。因此,这需要花费大量时间来测量更多的多段线。。
 
请帮助我朋友
 
提前感谢
回复

使用道具 举报

24

主题

1265

帖子

1028

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
362
发表于 2022-7-6 21:52:43 | 显示全部楼层
如果您愿意购买少量商品,请查看AutoCELL@http://www.dotsoft.com/autocell.htm
 
如果您喜欢这样做,或者认识这样的人,也可以用lisp或VBA对您的要求进行编码。
回复

使用道具 举报

1

主题

8

帖子

7

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 21:56:56 | 显示全部楼层
谢谢你的回复。。rkmcswain公司
 
请帮助我,任何人,谁知道lisp或VBA为我的需要。。。
 
谢谢
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 21:58:07 | 显示全部楼层
下面是一些VBA代码,它们是从一个更大的例程中分离出来的(即,可能需要进一步调整),该例程基本上可以满足您的要求。它会自动选择所有闭合多段线-轻量级、二维(拟合或花键连接)-并将信息发送到通用excel文件。
 
VBAIDE必须为您的Excel版本设置引用集。
 
  1. Option Explicit
  2. Sub PutPLProps2XL()
  3.   If ClosedPLSS Then
  4.      Dim objSS As AcadSelectionSet
  5.      Dim entEntity As AcadEntity
  6.      Dim objExcel As Excel.Application
  7.      Dim objRange As Excel.Range
  8.      Dim entLWPoly As AcadLWPolyline
  9.      Dim ent2DPoly As AcadPolyline
  10.      Dim intCount As Integer
  11.      On Error GoTo errhandler
  12.      Set objExcel = GetObject(, "Excel.Application")
  13.      On Error GoTo 0
  14.      Set objRange = objExcel.ActiveWorkbook.ActiveSheet.Range("A1")
  15.      objRange.value = "Pline Type"
  16.      objRange.Offset(0, 1).value = "Length"
  17.      objRange.Offset(0, 2).value = "Area"
  18.         Set objSS = ThisDrawing.SelectionSets.Item("TempSSet")
  19.         For intCount = 0 To objSS.count - 1
  20.            Set entEntity = objSS.Item(intCount)
  21.            If entEntity.ObjectName = "AcDbPolyline" Then
  22.               Set entLWPoly = entEntity
  23.               objRange.Offset(intCount + 1, 0).value = "LWPolyline"
  24.               objRange.Offset(intCount + 1, 1).value = entLWPoly.Length
  25.               objRange.Offset(intCount + 1, 2).value = entLWPoly.Area
  26.            Else
  27.               Set ent2DPoly = entEntity
  28.               objRange.Offset(intCount + 1, 0).value = "2DPolyline"
  29.               objRange.Offset(intCount + 1, 1).value = ent2DPoly.Length
  30.               objRange.Offset(intCount + 1, 2).value = ent2DPoly.Area
  31.            End If
  32.         Next
  33.   End If
  34.   Exit Sub
  35. errhandler:
  36.   Set objExcel = CreateObject("Excel.Application")
  37.   Resume Next
  38. End Sub
  39. Function ClosedPLSS() As Boolean
  40.   Dim intCode(19) As Integer
  41.   Dim varData(19) As Variant
  42.   ClosedPLSS = False
  43.   intCode(0) = -4: varData(0) = "<Or"
  44.      intCode(1) = -4: varData(1) = "<And"
  45.         intCode(2) = 0: varData(2) = "POLYLINE" 'or closed PLINES's
  46.         intCode(3) = -4: varData(3) = "&="
  47.         intCode(4) = 70: varData(4) = 1
  48.         intCode(5) = -4: varData(5) = "&"
  49.         intCode(6) = 70: varData(6) = 135
  50.         intCode(7) = -4: varData(7) = "<Not"
  51.            intCode( = -4: varData( = "&="
  52.            intCode(9) = 70: varData(9) = 8
  53.         intCode(10) = -4: varData(10) = "Not>"
  54.      intCode(11) = -4: varData(11) = "And>"
  55.      
  56.      intCode(12) = -4: varData(12) = "<And"
  57.         intCode(13) = 0: varData(13) = "LWPOLYLINE" 'or closed LWP's
  58.         intCode(14) = -4: varData(14) = "&="
  59.         intCode(15) = 70: varData(15) = 1
  60.         intCode(16) = -4: varData(16) = "&"
  61.         intCode(17) = 70: varData(17) = 129
  62.      intCode(18) = -4: varData(18) = "And>"
  63.   intCode(19) = -4: varData(19) = "Or>"
  64.   
  65.   If FilteredSS(intCode, varData) > 0 Then ClosedPLSS = True
  66. End Function
  67. Private Sub SSPrep()
  68. Dim SSS As AcadSelectionSets
  69.   'choose a selection set name for temporary storage and
  70.   'ensure that it does not currently exist
  71.   On Error Resume Next
  72.   Set SSS = ThisDrawing.SelectionSets
  73.      If SSS.count > 0 Then
  74.         SSS.Item("TempSSet").Delete
  75.      End If
  76. End Sub
  77. Function FilteredSS(Optional grpCode As Variant, Optional dataVal As Variant) As Integer
  78.   Dim TempObjSS As AcadSelectionSet
  79.   SSPrep
  80.   Set TempObjSS = ThisDrawing.SelectionSets.Add("TempSSet")
  81.         'generate selection set
  82.      TempObjSS.Select acSelectionSetAll, , , grpCode, dataVal
  83.   FilteredSS = TempObjSS.count
  84. End Function
回复

使用道具 举报

1

主题

8

帖子

7

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 22:03:21 | 显示全部楼层
谢谢你的回复。。。。
 
我尝试了你的vba,但它显示错误。。。我想,原因是excel版本。。。
 
我正在使用Excel 2002和auto cad 2004。。所以,请帮助我获取这个版本。。
 
谢谢和问候
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 22:05:29 | 显示全部楼层
可以通过“工具参考”菜单项(如图所示)设置对Excel正确版本的参考。我使用的是Excel 2003,因此您可能会选择“Microsoft Excel 10.0对象库”
 
如果这不是错误的原因,请发布实际的错误消息,我们将尝试解决它。
224822itrnpatre4norutp.jpg
回复

使用道具 举报

1

主题

8

帖子

7

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 22:09:14 | 显示全部楼层
现在,它是工作的朋友。。。。。谢谢你。。。。
回复

使用道具 举报

1

主题

8

帖子

7

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 22:11:33 | 显示全部楼层
亲爱的朋友肖特。。。
 
请在此提供帮助。。。
 
你的编码工作得很好。
 
但是,我需要。。。。。
 
“在excel工作表中显示选定的多段线属性(如图层名、面积、长度)…”
 
请帮忙。。。。。。。
 
 
谢谢
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 22:14:52 | 显示全部楼层
下面的代码还记录了PLINE的图层特性。一些事情被重新安排为新的财产序列。我还修复了errorhandler部分。
 
注意:这个例程无法描述地记录了所有闭合的pline。“选定”Pline需要修改代码。
 
鉴于这是一个基于“导师”的网站,也许你应该告诉我如何记录普林斯线型。查看这两个代码示例是如何更改的,以及在Excel中的效果。现在将线型(.linetype)添加到列表中。如果有任何问题,请随时提问。
 
  1. Option Explicit
  2. Sub PutPLProps2XL()
  3.   If ClosedPLSS Then
  4.      Dim objSS As AcadSelectionSet
  5.      Dim entEntity As AcadEntity
  6.      Dim objExcel As Excel.Application
  7.      Dim objRange As Excel.Range
  8.      Dim entLWPoly As AcadLWPolyline
  9.      Dim ent2DPoly As AcadPolyline
  10.      Dim intCount As Integer
  11.      On Error GoTo errhandler
  12.      Set objExcel = GetObject(, "Excel.Application")
  13.      On Error GoTo 0
  14.      Set objRange = objExcel.ActiveWorkbook.ActiveSheet.Range("A1")
  15.      objRange.value = "Layer"
  16.      objRange.Offset(0, 1).value = "Pline Type"
  17.      objRange.Offset(0, 2).value = "Length"
  18.      objRange.Offset(0, 3).value = "Area"
  19.         Set objSS = ThisDrawing.SelectionSets.Item("TempSSet")
  20.         For intCount = 0 To objSS.count - 1
  21.            Set entEntity = objSS.Item(intCount)
  22.            If entEntity.ObjectName = "AcDbPolyline" Then
  23.               Set entLWPoly = entEntity
  24.               objRange.Offset(intCount + 1, 0).value = entLWPoly.Layer
  25.               objRange.Offset(intCount + 1, 1).value = "LWPolyline"
  26.               objRange.Offset(intCount + 1, 2).value = entLWPoly.Length
  27.               objRange.Offset(intCount + 1, 3).value = entLWPoly.Area
  28.            Else
  29.               Set ent2DPoly = entEntity
  30.               objRange.Offset(intCount + 1, 0).value = ent2DPoly.Layer
  31.               objRange.Offset(intCount + 1, 1).value = "2DPolyline"
  32.               objRange.Offset(intCount + 1, 2).value = ent2DPoly.Length
  33.               objRange.Offset(intCount + 1, 3).value = ent2DPoly.Area
  34.            End If
  35.         Next
  36.   End If
  37.   Set objExcel = Nothing
  38.   Exit Sub
  39. errhandler:
  40.   Err.Clear
  41.   Set objExcel = CreateObject("Excel.Application")
  42.   With objExcel
  43.      .Workbooks.Add
  44.      .Visible = True
  45.      .WindowState = xlMinimized
  46.   End With
  47.   Resume Next
  48. End Sub
  49. Function ClosedPLSS() As Boolean
  50.   Dim intCode(19) As Integer
  51.   Dim varData(19) As Variant
  52.   ClosedPLSS = False
  53.   intCode(0) = -4: varData(0) = "<Or"
  54.      intCode(1) = -4: varData(1) = "<And"
  55.         intCode(2) = 0: varData(2) = "POLYLINE" 'or closed PLINES's
  56.         intCode(3) = -4: varData(3) = "&="
  57.         intCode(4) = 70: varData(4) = 1
  58.         intCode(5) = -4: varData(5) = "&"
  59.         intCode(6) = 70: varData(6) = 135
  60.         intCode(7) = -4: varData(7) = "<Not"
  61.            intCode( = -4: varData( = "&="
  62.            intCode(9) = 70: varData(9) = 8
  63.         intCode(10) = -4: varData(10) = "Not>"
  64.      intCode(11) = -4: varData(11) = "And>"
  65.      
  66.      intCode(12) = -4: varData(12) = "<And"
  67.         intCode(13) = 0: varData(13) = "LWPOLYLINE" 'or closed LWP's
  68.         intCode(14) = -4: varData(14) = "&="
  69.         intCode(15) = 70: varData(15) = 1
  70.         intCode(16) = -4: varData(16) = "&"
  71.         intCode(17) = 70: varData(17) = 129
  72.      intCode(18) = -4: varData(18) = "And>"
  73.   intCode(19) = -4: varData(19) = "Or>"
  74.   
  75.   If FilteredSS(intCode, varData) > 0 Then ClosedPLSS = True
  76. End Function
  77. Private Sub SSPrep()
  78. Dim SSS As AcadSelectionSets
  79.   'choose a selection set name for temporary storage and
  80.   'ensure that it does not currently exist
  81.   On Error Resume Next
  82.   Set SSS = ThisDrawing.SelectionSets
  83.      If SSS.count > 0 Then
  84.         SSS.Item("TempSSet").Delete
  85.      End If
  86. End Sub
  87. Function FilteredSS(Optional grpCode As Variant, Optional dataVal As Variant) As Integer
  88.   Dim TempObjSS As AcadSelectionSet
  89.   SSPrep
  90.   Set TempObjSS = ThisDrawing.SelectionSets.Add("TempSSet")
  91.         'generate selection set
  92.      TempObjSS.Select acSelectionSetAll, , , grpCode, dataVal
  93.   FilteredSS = TempObjSS.count
  94. End Function
回复

使用道具 举报

1

主题

8

帖子

7

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 22:17:44 | 显示全部楼层
非常感谢你。。。朋友肖特。。
 
我将使用此编码,并尽快发送反馈和其他需求。。
 
 
谢谢Againnn
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 13:54 , Processed in 0.401980 second(s), 74 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表