我一直在使用VBA的文件夹浏览器,我可以粘贴它的代码,但底线是我得到的文件名作为字符串返回。 有没有办法在没有打开的情况下访问图纸属性(即布局数量)?
Public Sub TestFileDialog()
dwgname = FileBrowseOpen("C:", "*", ".dwg", 1) 'dwgname is typeof string
End Sub
它只是第一步(使用FileBrowseOpen函数显示,但我也可以使用FolderBrowse并收集文件夹中的所有.dwg),实际上我想到将所选.dwgs的所有布局批量导出到currenty打开一个。有没有机会呢?
答案 0 :(得分:2)
要有效阅读.dwg文件,您需要打开AutoCAD,否则无法访问该信息。某些属性可能是作者,但不是布局数量......
但您可以使用AutoCAD Console(accoreconsole.exe)运行无头AutoCAD并使用API读取您需要的任何信息。这对于阅读很多文件非常快,用户不会看到它正在运行(但无论如何都需要安装)。
http://aucache.autodesk.com/au2012/sessionsFiles/3338/3323/handout_3338_CP3338-Handout.pdf
答案 1 :(得分:1)
你可以留在VBA并使用ObjectDBX 它导致了与.NET中的accoreconsole.exe一样非常类似的方法,即你不会在UI中看到任何绘图,因为它适用于数据库本身 它需要将库参考(工具 - >参考)添加到“AutoCAD / ObjectDBX Common XX.Y类型库”,其中“XX.Y”是“19.0”用于AutoCAD 2014 最小功能代码是
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会话才能运行此子程序!但是自从谈到“当前开放”的绘图以来你应该拥有它