Wesley_Amsterda 发表于 2022-7-5 22:57:10

从mul导出属性数据

大家好,
 
自2007年以来,我一直使用一种工具,可以将所有属性数据导出到excel,调整数据并将其更新回Autocad。
这一切都是通过VBA完成的。
不幸的是,代码从未被更新,现在它不再工作了。
 
我经常使用这个工具,我真的希望它能再次工作。
或者类似的事情。
 
工作流程应如下所示:
 
-运行命令(将块信息导出到excel)
(在后台打开excel)
-选择块
-如果存在块,程序将检查所有图形(在autocad会话中打开的图形)。
-然后将所有属性信息导出到Excel。
 
第二个程序将更新所有打开图形中的所有属性。
 
谁能帮我???
 
当做
卫斯理

MSasu 发表于 2022-7-5 23:05:27

由于新版本的AutoCAD默认不再支持VBA,因此您的工具可能停止工作;但是,您可以从Autodesk下载启用程序扩展。

Wesley_Amsterda 发表于 2022-7-5 23:12:41

我的所有版本都安装了vba enabler。
不知怎的,它已经不起作用了。
在Acad2014中,32位代码不再是wokring。
 
我不是vba程序员,所以我找不到问题。

BIGAL 发表于 2022-7-5 23:19:51

它是开放代码还是已编译?如果编译,那么尝试在64位中运行可能是个问题。
 
你有源代码吗?使用Vbaman进行测试可以从命令行a运行DVB使用:^C^C(vl vbaload“S:/VBA/Design Toolkit.DVB”)(vl vbarun“Toolkit”)

Wesley_Amsterda 发表于 2022-7-5 23:27:57

我更想知道这是否也可以通过LISP实现。

Spaj 发表于 2022-7-5 23:34:13

你好
 
你看过李的例行公事了吗
 
http://www.lee-mac.com/macatt.html

MSasu 发表于 2022-7-5 23:38:33

这只是一个操作,“调整数据”意味着在更新属性之前在Excel中进行计算?或者是大约两个单独的操作/命令(导出/导入)?
 
 
基本上,为了解决最后一个问题,您可以使用AutoLISP提取/编辑属性,还可以通过COM技术访问Excel,因此复制您的工具似乎是可行的。

Wesley_Amsterda 发表于 2022-7-5 23:46:06

Macatt只允许我导出属性值。
我想要的是:
-要选择标题栏,
-将所有打开图形的所有属性值导出到excel,
-更新信息(如drawingnumbers-drawingtitles)
-将其重新导入autocad。
 
@比加尔
我看了vba代码。但它看起来使用了很多不同的部件。

BIGAL 发表于 2022-7-5 23:52:08

如果你很高兴发布代码,听起来好像它没有编译,那么有人可以试着运行并找到问题。可能比重新开始更简单。如果需要,甚至可以更容易地重写它。

Wesley_Amsterda 发表于 2022-7-6 00:01:17

我不知道这是否是全部代码。
这只是其中的一部分。
dvb文件中有大量的小工具。
 
希望你能用它做点什么。
 

Public Sub TelAllDocs()
Dim aDocs As Variant, aDoc As AcadDocument
Dim oBlok As AcadBlockReference, Pt
Dim Excel As Object, ExcelSheet As Object
Dim nX
Dim EersteRij() As Variant

   Debug.Print
   
   Set Excel = StartExcel
   Excel.Visible = True
   Excel.Workbooks.Add
   Set ExcelSheet = Excel.sheets.Add
   ExcelSheet.name = Format(Application.Documents.Count, "00") & "-documenten"
   RowNum = 2
   
   EersteRij = Array("Bloknaam", "X", "Y", "Handle", "Layer", "Pad", "Filenaam")
   
   ExcelSheet.Range("A1:BZ1").Font.Bold = True

   For nX = LBound(EersteRij) To UBound(EersteRij)
       ExcelSheet.cells(1, nX + 1).Value = EersteRij(nX)
   Next nX
   
   AppActivate "Autocad", False
   DoEvents
   On Error Resume Next
   ThisDrawing.Utility.GetEntity oBlok, Pt, "Wijs Blok aan : "
   If Err.Number <> 0 Then Exit Sub
   On Error GoTo 0
   
   Set aDocs = Application.Documents
   
   For Each aDoc In aDocs
       Debug.Print aDoc.Path; "\"; aDoc.name
       aDoc.Activate
       TelAttrDoc oBlok.name
   Next
   Beep
   Set Excel = Nothing
   Set ExcelSheet = Nothing
   
End Sub

Private Sub TelAttrDoc(sBlokNaam)
Dim Excel As Object
Dim oBlokje As Object
Dim ExcelSheet As Object
Dim Array1 As Variant
Dim Count
Dim NumberOfAttributes As Integer
Dim FoundAttributes As Boolean
Dim tmp As Integer
Dim oBlokjeReference As AcadBlockReference
Dim sBlokName As String
Dim nKol1, nX, Retval As Double, nTimeout As Byte
Dim EersteRij() As Variant

Dim W9 As AcadSelectionSet
Dim Q4 As cObj
   Set Q4 = New cObj
   Q4.VoegToeGroepModified BLOK, Left(sBlokNaam, 7) & "*"
   Q4.SelType = acSelectAll
   Q4.ExcecuteSelect
   
   Set W9 = ThisDrawing.SelectionSets(Q4.SelSetNaam)
   Debug.Print W9.Count
   If W9.Count = 0 Then Exit Sub
   
   nTagTeller = 0

   Set Excel = StartExcel
   Set ExcelSheet = Excel.sheets(Format(Application.Documents.Count, "00") & "-documenten")
   
   On Error GoTo 0

   EersteRij = Array("", "", "", "", "", "", "")
   
   For Each oBlokje In W9
       If oBlokje.HasAttributes Then
         Set oBlokjeReference = oBlokje
               ExcelSheet.cells(RowNum, 1) = oBlokje.name
               ExcelSheet.cells(RowNum, 1).NumberFormat = "@"
               ExcelSheet.cells(RowNum, 2).Value = oBlokjeReference.InsertionPoint(0)
               ExcelSheet.cells(RowNum, 3).Value = oBlokjeReference.InsertionPoint(1)
               ExcelSheet.cells(RowNum, 4).NumberFormat = "@"
               ExcelSheet.cells(RowNum, 4).Value = oBlokjeReference.Handle
               ExcelSheet.cells(RowNum, 5).Value = oBlokjeReference.Layer
               ExcelSheet.cells(RowNum, 6).Value = ThisDrawing.GetVariable("dwgprefix")
               ExcelSheet.cells(RowNum, 7).Value = ThisDrawing.GetVariable("dwgname")
               Array1 = oBlokjeReference.GetAttributes
               For Count = LBound(Array1) To UBound(Array1)
                   nKol1 = WelkeKolomMod(Trim(Array1(Count).TagString), ExcelSheet, UBound(EersteRij) + 1)
                   ExcelSheet.cells(RowNum, nKol1).NumberFormat = "@"
                   ExcelSheet.cells(RowNum, nKol1).Value = Trim(Array1(Count).TextString)
               Next Count
               RowNum = RowNum + 1
       End If
   Next oBlokje
   Set Excel = Nothing
   Set ExcelSheet = Nothing
End Sub

 
对不起,里面有荷兰语.:-)
页: [1]
查看完整版本: 从mul导出属性数据