AutoCAD表格数据提取
很好的一天寻求从AutoCAD表中提取数据的帮助。
Hav找到了一个关于如何使用VB在AutoCAD中创建表的fex示例。Net,但在如何循环遍历AutoCAD表中的行和列并查看其中的项方面运气不佳。希望能够循环浏览图形列表,打开图形在图纸或模型空间中查找表,循环浏览记录并将其导出到excel-SQL或XML,甚至是在VB中创建记录集合的简单方法。Net,其中一个colud然后导出列表
欢迎任何助手
当做 尝试一下,更改文件夹的完整路径和CSV文件名
在命令WTB开始时
导入系统导入系统。text导入系统。IOImports系统。数据导入系统。LinqImports Autodesk。AutoCAD。运行时导入Autodesk。AutoCAD。DatabaseServicesImports Autodesk。AutoCAD。EditorInputImports Autodesk。AutoCAD。Geometry导入Autodesk。AutoCAD。ApplicationServices“”-----------------------------------------“”公共函数GetDirectoryDrawings(directoryFullName作为字符串,subDirsBrowse作为布尔值)作为列表(文件信息)Dim dir作为新的DirectoryInfo(directoryFullName),如果不是dir。如果Dim opt As SearchOption=SearchOption,则返回New DirectoryNotFoundException()Nothing End。AllDirectories如果subDirsBrowse=False,则opt=SearchOption。TopDirectoryOnly返回目录。GetFiles(“*dwg”,opt)。AsEnumerable()。OrderBy(函数(x)x.FullName)。ToList()End Function“将命令名更改为适合\uPublic Sub testDirFiles()Dim文件夹为String=“C:\Test”Dim csvfile为String=“C:\Test\atable.csv”Dim doc为Document=Autodesk。AutoCAD。应用程序服务。应用DocumentManager。MdiActiveDocument Dim db As Database=doc。数据库尺寸为Editor=doc。编辑器Dim fd As List(Of FileInfo)=GetDirectoryDrawings(folder,False)'True用于处理子目录Dim collect As New StringBuilder If fd。计数=0,然后返回尝试使用doclock作为DocumentLock=doc。n的LockDocument(),整数=0到fd。Count-1 Dim dwgname作为String=fd(n)。FullName使用newdb作为数据库=新数据库(False,True)ed.WriteMessage(vbLf+dwgname+vbLf)尝试使用newdb。ReadDwgFile(dwgname,FileOpenMode.OpenForReadAndAllShare,False,Nothing)Catch ex As Autodesk。AutoCAD。运行时。如果ex.ErrorStatus=ErrorStatus,则异常。如果End尝试使用newtr As Transaction=newdb,则DwgNeedsRecovery将继续用于End。TransactionManager。StartTransaction“打开字典以读取Dim layoutDict,因为DBDictionary=DirectCast(newtr.GetObject(newdb.LayoutDictionaryId,OpenMode.ForRead),DBDictionary)'遍历每个条目的字典条目作为字典进入layoutDict Dim ltr作为布局=DirectCast(newtr.GetObject(DirectCast(entry.Value,ObjectId),OpenMode。ForRead),Layout)Dim btr As BlockTableRecord=DirectCast(newtr.GetObject(ltr.BlockTableRecordId,OpenMode.ForRead),BlockTableRecord),每个id作为btr Dim obj中的ObjectId As DBObject=DirectCast(newtr.GetObject(id,OpenMode.ForRead),DBObject)如果对象的类型为Table,则Dim tbl为Table=TryCast(obj,Table),如果tbl不是Nothing,则收集。AppendLine(String.Format(“-----------------------------------------”)收集。AppendLine(String.Format(“绘图名称:{0}”,dwgname))收集。AppendLine(String.Format(“Tab:{0}”,ltr.LayoutName))Dim numrows As Integer=tbl。排。将Dim numcols计数为整数=tbl。柱。将i计数为整数=0到numrows-1 Dim行作为新列表(字符串的)Dim行作为字符串=字符串。对于j=0到numcols-1 Dim cel,为空,因为单元格=tbl。单元格(i,j)行线。添加(cel.TextString)行=行+单元格。text字符串+vbTab下一个collect。AppendLine(line.TrimEnd(vbTab))Next End If End If Next newtr。Commit()End Using End Using Next End Using WriteTableToFile(csvfile,collect)Catch ex As System。异常ed.WriteMessage(vbLf+ex.ToString+vbLf)最终ed.WriteMessage(vbLf+vbTab+“-->文件另存为:{0} 很好的一天
自从我做了一些开发以来已经有一段时间了,非常感谢您的帮助和示例代码。
将通过您的示例代码,让您知道是否成功。
致以最诚挚的问候,Richard
保持良好 谢谢兄弟,
如果出现问题,请告诉我,
~'J'~ 你好“fixo”,
请回答这个问题:
在设计2002年AutoCAD以及2012年及以后的版本之前,DATAEXTRACT会使用旧图形吗?
图纸上提取的数据在每个图纸的列数中是否一致?还是一幅幅幅地画?
我还尝试将VB代码添加到项目中,但它找不到导入中提到的命名空间。
我做错什么了吗?我已安装AutoCAD 2012。
非常感谢。 你好
给出的示例代码是VB。NET版本3.5
AutoCAD 2012已升级到。净额4
命名空间在之间更改。Net 3.5和。净额4
遗憾的是,我从未升级代码。净额4
为了能够编译和编辑代码,可以使用VS 2010
下面提供的链接
http://www.microsoft.com/visualstudio/eng/downloads#d-2010年快车
在开发过程中,还需要对设置和环境有一点了解。Net add-ons for AutoCAD。下面提供的链接
http://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=1911627
下面的数据将搜索所有表,然后遍历特定表的所有列,然后是行。如果图形中有10个不同的表,它将提取每个表特定的所有数据,无论它们有多不同。
我在更正中这样说,但如果打开包含表格的早期版本的AutoCAD,并且AutoDesk没有更改其表格类,则应该能够提取数据。如果将AutoCAD中对象的特性视为附着的图像,则这必须是表。
但是,我在AutoCAD中见过其他表类型,如AutoCAD Structural Detailing,但从未尝试从中检查或提取数据。
希望以上信息提供一些帮助,如果我有时间,我会更新数据提取功能,并附上一个zip文件与。Net编译的项目。可悲的是,我正在这边装修房子,时间不多。
顺致敬意,
理查德
页:
[1]