使用Access 2007中的VBA搜索AutoCAD(dwg)文件

5
我有数百个DWG、AutoCAD文件,希望将它们搜索并编目到MS Access数据库中。
基本上,我想搜寻DWG文件,并提取标题框中的任何描述以及日期,并将所有内容转移到Access中,使其成为可搜索的目录。
例如,我有一个名为T-25682.DWG的文件,标题为"Machine Spacer",创建于01/20/2010。
我会从DWG文件中提取这些信息,并将其插入到Access数据库中,如下所示:
== ID ==    == DESCRIPTION ==    == CREATED ON ==    == FILENAME ==

    1       Machine Spacer       01/20/2010          T-25682.dwg

我该如何解决这个问题?是否有一个可以与Access一起使用的AutoCAD库?我如何在DWG文件中进行搜索?


显然,您可以获取Autocad的VBA模块,这应该允许自动化,除非您希望查看.Net。 - Fionnuala
据我所知,这更多是允许您从AutoCAD内运行VBA宏的功能。我只是想像读取简单的.txt文件一样使用宏来读取AutoCAD文件。 - AKKAweb
当我用Word打开文件时,所有内容都被编码为我无法阅读的字符。有没有办法读取其中的内容或搜索并找到需要的信息? - AKKAweb
我认为,如果你有适当的库,你可以在Access VBA中引用它们,并使用它来读取相关文件属性,其中包括标题,这是我在该主题上进行了一些搜索后得出的结论。 - Fionnuala
以同样的方式,如果您在Access中引用了Word库,您可以创建一个Word应用程序对象,并使用所有可通过该对象访问的属性和方法。 - Fionnuala
这正是我想要做的事情。 - AKKAweb
2个回答

3
我建议完全避免使用VBA,AutoLISP可以更轻松地完成工作。以下是方法:
在AutoLISP文件中创建“数据提取和写入Access”的功能。如果您无法实现此目标,或者无法使用ADOLisp库进行访问,那么您可以随时将其写入csv文件。
一旦您能够为单个dwg文件执行此操作,请创建一个脚本(使用任何可以复制和打开文件的工具,AutoLisp也可以),并执行以下操作:
1. 将该lisp文件复制到存放dwg文件的目录中,并将文件命名为acaddoc.lsp。 2. 顺序打开目录中的每个dwg文件。打开后,acaddoc.lsp将运行并完成其任务。 3. 从该目录中删除acaddoc.lsp(否则每次在其中打开dwg时都会运行)。 4. 对于您希望编目的每个包含dwg文件的目录重复执行以上步骤。
注意事项:
  1. 确保acaddoc.lsp在完成后关闭绘图(或使AutoCAD退出,具体取决于您如何打开文件)。
  2. 为了使其正常工作,您的标题块需要可靠,请确保添加一些错误检查。您可以使用脚本将任何问题记录到文本文件中,以便发现...

AutoLisp非常简单易学,如果需要帮助,请访问AutoLISP初学者教程

如果您想提出问题并搜索以前回答过的代码片段的最佳地点,请参阅Visual LISP,AutoLISP和常规自定义


1

如果您拥有完整版本的AutoCAD,则可以尝试使用数据提取向导。这对于带属性的块非常有效。如果这不好用,最好尝试的地方是Swamp或AutoCAD论坛或AUGI。

VBA在最近的3个AutoCAD版本中已被弃用,而改用.NET API,供您参考。

+编辑+ 请查看这个(免费)关于AutoCAD外部数据库连接的章节


数据提取向导如果能够正常工作,将会耗费大量时间来对庞大的文件库进行编目。据我所知,我需要逐个打开文件并使用该工具。我不是在寻找AutoCAD内部的任何内容。我正在寻找一种使用ACCESS/VBA从DWG文件中提取信息的方法。感谢您的帮助! - AKKAweb
您可以选择一组文件并保存该集合以及提取参数。您需要AutoCAD或AutoCAD API版本来读取DWG文件。它们是一种专有格式且加密的文件。Access没有本地访问(哈哈)AutoCAD图纸的方法。您需要基于AutoCAD REAL DWG或ODA API编写一个应用程序,或购买已经存在的应用程序。即使安装了AutoCAD,任何使用它的应用程序也必须在AutoCAD进程内运行-这是该库的限制。 - CAD bloke
实际上,我说错了 - ActiveX 可以在进程外运行。请参见 http://docs.autodesk.com/ACD/2010/ENU/AutoCAD%20.NET%20Developer's%20Guide/index.html?url=WS73099cc142f48755-5c83e7b1120018de8c0-2202.htm,topicNumber=d0e3474。请注意 - 它非常缓慢,并且正在逐渐被 .NET 取代。这可能会有所帮助:http://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=3377116。 - CAD bloke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接