通过 VBA 在不打开的情况下访问 autocad 对象属性
Access autocad object properties without opening it by VBA
我一直在使用 VBA 的文件夹浏览器,我可以粘贴它的代码,但最重要的是我得到的是作为字符串返回的文件名。
有什么方法可以在不打开的情况下访问绘图属性(即布局数量)?
Public Sub TestFileDialog()
dwgname = FileBrowseOpen("C:", "*", ".dwg", 1) 'dwgname is typeof string
End Sub
这只是第一步(显示了 FileBrowseOpen 功能的使用,但我也可以使用 FolderBrowse 并收集文件夹内的所有 .dwg),实际上我想将所选 .dwg 的所有布局批量导出到当前打开一个。有机会吗?
要有效读取 .dwg 文件,您需要打开 AutoCAD,否则无法访问信息。有些属性可能是,例如作者,但不是布局数量...
但您可以使用 AutoCAD 控制台 (accoreconsole.exe) 运行 无头 AutoCAD 并使用 API 读取您需要的任何信息。这对于读取大量文件来说非常快,用户不会看到它 运行ning(但无论如何都需要安装)。
http://aucache.autodesk.com/au2012/sessionsFiles/3338/3323/handout_3338_CP3338-Handout.pdf
您可以留在 VBA 并使用 ObjectDBX
它导致与 .NET 中的 accoreconsole.exe on 非常相似的方法,即您不会在 UI 中看到任何打开的绘图,因为它在数据库本身上工作
它需要将库引用(工具-> 引用)添加到 "AutoCAD/ObjectDBX Common XX.Y Type Library",其中 "XX.Y" 是 AutoCAD 2014 的“19.0”
一个最小的功能代码是
Sub main()
Dim myAxDbDoc As AxDbDocument
Dim FullFileName As String
FullFileName = "C:\..\mydrawing.dwg" '<== put here the full name of the file to be opened
Set myAxDbDoc = AxDb_SetDrawing(FullFileName)
MsgBox myAxDbDoc.Layers.Count
End Sub
Function AxDb_SetDrawing(FullFileName As String) As AxDbDocument
Dim DBXDoc As AxDbDocument
Set DBXDoc = Application.GetInterfaceObject("ObjectDBX.AxDbDocument.19") '<== place correct AutoCAD version numeber ("19" works for AutoCAD 2014)
On Error Resume Next
DBXDoc.Open FullFileName
If Err <> 0 Then
MsgBox "Couldn't open" & vbCrLf & vbCrLf & FullFileName, vbOKOnly + vbCritical, "AxDB_SetDrawing"
Else
Set AxDb_SetDrawing = DBXDoc
End If
On Error GoTo 0
End Function
不过,您必须有一个 AutoCAD 会话 运行ning 从中创建此子 运行!不过既然说了"currently open"画
你就应该有
我一直在使用 VBA 的文件夹浏览器,我可以粘贴它的代码,但最重要的是我得到的是作为字符串返回的文件名。 有什么方法可以在不打开的情况下访问绘图属性(即布局数量)?
Public Sub TestFileDialog()
dwgname = FileBrowseOpen("C:", "*", ".dwg", 1) 'dwgname is typeof string
End Sub
这只是第一步(显示了 FileBrowseOpen 功能的使用,但我也可以使用 FolderBrowse 并收集文件夹内的所有 .dwg),实际上我想将所选 .dwg 的所有布局批量导出到当前打开一个。有机会吗?
要有效读取 .dwg 文件,您需要打开 AutoCAD,否则无法访问信息。有些属性可能是,例如作者,但不是布局数量...
但您可以使用 AutoCAD 控制台 (accoreconsole.exe) 运行 无头 AutoCAD 并使用 API 读取您需要的任何信息。这对于读取大量文件来说非常快,用户不会看到它 运行ning(但无论如何都需要安装)。
http://aucache.autodesk.com/au2012/sessionsFiles/3338/3323/handout_3338_CP3338-Handout.pdf
您可以留在 VBA 并使用 ObjectDBX 它导致与 .NET 中的 accoreconsole.exe on 非常相似的方法,即您不会在 UI 中看到任何打开的绘图,因为它在数据库本身上工作 它需要将库引用(工具-> 引用)添加到 "AutoCAD/ObjectDBX Common XX.Y Type Library",其中 "XX.Y" 是 AutoCAD 2014 的“19.0” 一个最小的功能代码是
Sub main()
Dim myAxDbDoc As AxDbDocument
Dim FullFileName As String
FullFileName = "C:\..\mydrawing.dwg" '<== put here the full name of the file to be opened
Set myAxDbDoc = AxDb_SetDrawing(FullFileName)
MsgBox myAxDbDoc.Layers.Count
End Sub
Function AxDb_SetDrawing(FullFileName As String) As AxDbDocument
Dim DBXDoc As AxDbDocument
Set DBXDoc = Application.GetInterfaceObject("ObjectDBX.AxDbDocument.19") '<== place correct AutoCAD version numeber ("19" works for AutoCAD 2014)
On Error Resume Next
DBXDoc.Open FullFileName
If Err <> 0 Then
MsgBox "Couldn't open" & vbCrLf & vbCrLf & FullFileName, vbOKOnly + vbCritical, "AxDB_SetDrawing"
Else
Set AxDb_SetDrawing = DBXDoc
End If
On Error GoTo 0
End Function
不过,您必须有一个 AutoCAD 会话 运行ning 从中创建此子 运行!不过既然说了"currently open"画
你就应该有