tiger1337 发表于 2022-7-6 22:57:56

从特定文本读取文本

大家好,我刚刚开始用vba为autocad编写脚本。我刚刚完成了一个重新编号的所有行号,我选择了我的绘图。现在,我想写一个程序,自动制作目录的过程。基本上,唯一的输入需要是一个包含图形的文件夹位置,每个图形都有一个相同的标题信息文本块,然后程序将打开所有文件,从描述块中提取信息,然后将其放入表中。我的问题是:如何在不需要用户选择的情况下访问文本块中的文本?
 
谢谢
老虎1337

RMS 发表于 2022-7-6 23:09:59

这些图形保存为什么。图纸或。dxf?

tiger1337 发表于 2022-7-6 23:12:26

它们另存为。图纸。

SEANT 发表于 2022-7-6 23:20:17

文本块是否有唯一的属性?

tiger1337 发表于 2022-7-6 23:27:49

嗯,它的独特之处在于它是任何图形上唯一的文本块。(所有其他文本显示在单行文本框中。)标题文本块有问题,我双击它来分解和编辑每个字段。这就是你的意思吗?

SEANT 发表于 2022-7-6 23:37:08

你的意思是说它是图纸中唯一的多行文字;任何其他文字都是单行文字实体?
 
这句话听起来像是在处理一个区块。可以举个例子吗?它肯定会提供更明智的建议。
 
任何一种情况都允许程序有机会进行相应的隔离和修改。ObjectDBX(论坛中有几个线程)是一个很好的选择,可以检查一组图形的数据库,而不必在图形编辑器中打开它们。

tiger1337 发表于 2022-7-6 23:39:40

好的,很抱歉上次发帖以来耽搁了很长时间。
 
截至目前,我无法发布样本。dwg文件,但我在程序本身方面取得了一些进展。希望这能让每个人都清楚地知道我在做什么:
 


Public Sub GetDescription()
   Dim varAttributes As Variant
   Dim objTemp As Object
   Dim strD As String

   'loop through each block until the specific one is found
   For Each objTemp In ThisDrawing.ActiveLayout.Block
       If objTemp.EntityName = "AcDbBlockReference" Then
               If objTemp.Name = "BORDERA" Then

               'varAttributes now has attributes of specific block
               varAttributes = objTemp.GetAttributes
               Exit For
         End If
       End If
   Next

'store description lines
strD = varAttributes(3).TextString & " " _
       & varAttributes(4).TextString & " " _
       & varAttributes(5).TextString

'message box with description
MsgBox strD
End Sub

 
总而言之,这个脚本基本上找到了名为“BORDERA”的块,并保存了它在第4、第5和第6个属性中找到的值。(我在每张图纸上都有三行描述。)现在,我正在采取小步骤,使这个项目的工作。下一个任务是打开指定文件夹中的所有图形,并获取每个图形的描述。肖特,我将研究你关于使用objectDBX的建议。
 
我会张贴我的进展,因为我去,但任何关于该项目的进一步建议是赞赏的。

tiger1337 发表于 2022-7-6 23:45:28

好的,我已经研究了很长一段时间如何使用objectDBX,但我不知道如何开始。在我看来,一旦我在forloop中打开每个文件,我应该能够应用我以前的脚本来访问描述行。有人能帮我解释一下语法吗?
 
谢谢
老虎1337

SEANT 发表于 2022-7-6 23:54:03

ObjectDBX无法使用“ThisDrawing.ActiveLayout”对象。就这一点而言,“ThisDrawing”也不是。查看此线程中的代码示例,以了解隔离特定块的方法。
 
http://www.cadtutor.net/forum/showthread.php?26666
 
我怀疑您需要隔离与布局相关的块,然后执行搜索以返回块引用“BORDERA”。

tiger1337 发表于 2022-7-7 00:03:51

好的,我在objectDBX方面取得了进展。下面是我如何使用它的一个片段:
 

Dim dbxDoc As AXDBLib.AxDbDocument

Set dbxDoc = Application.GetInterfaceObject("ObjectDBX.AxDbDocument.17")
dbxDoc.Open (strPath & "\" & strList(intJ))

Set dbxDoc = Nothing

 
我想知道最后一行代码是否正确地关闭了文件。我仍然不熟悉所有语法,我知道在程序中正确关闭文件很重要。上面的代码将在for循环中(除了dim语句)。最后一行代码会关闭文件吗?或者这对于objectDBX甚至都不是必需的?
 
~老虎1337
页: [1]
查看完整版本: 从特定文本读取文本