乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 148|回复: 9

从特定文本读取文本

[复制链接]

3

主题

16

帖子

13

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 22:57:56 | 显示全部楼层 |阅读模式
大家好,我刚刚开始用vba为autocad编写脚本。我刚刚完成了一个重新编号的所有行号,我选择了我的绘图。现在,我想写一个程序,自动制作目录的过程。基本上,唯一的输入需要是一个包含图形的文件夹位置,每个图形都有一个相同的标题信息文本块,然后程序将打开所有文件,从描述块中提取信息,然后将其放入表中。我的问题是:如何在不需要用户选择的情况下访问文本块中的文本?
 
谢谢
老虎1337
回复

使用道具 举报

RMS

9

主题

38

帖子

29

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 23:09:59 | 显示全部楼层
这些图形保存为什么。图纸或。dxf?
回复

使用道具 举报

3

主题

16

帖子

13

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 23:12:26 | 显示全部楼层
它们另存为。图纸。
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 23:20:17 | 显示全部楼层
文本块是否有唯一的属性?
回复

使用道具 举报

3

主题

16

帖子

13

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 23:27:49 | 显示全部楼层
嗯,它的独特之处在于它是任何图形上唯一的文本块。(所有其他文本显示在单行文本框中。)标题文本块有问题,我双击它来分解和编辑每个字段。这就是你的意思吗?
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

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

使用道具 举报

3

主题

16

帖子

13

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 23:39:40 | 显示全部楼层
好的,很抱歉上次发帖以来耽搁了很长时间。
 
截至目前,我无法发布样本。dwg文件,但我在程序本身方面取得了一些进展。希望这能让每个人都清楚地知道我在做什么:
 
  1. Public Sub GetDescription()
  2.    Dim varAttributes As Variant
  3.    Dim objTemp As Object
  4.    Dim strD As String
  5.    'loop through each block until the specific one is found
  6.    For Each objTemp In ThisDrawing.ActiveLayout.Block
  7.        If objTemp.EntityName = "AcDbBlockReference" Then
  8.                If objTemp.Name = "BORDERA" Then
  9.                'varAttributes now has attributes of specific block
  10.                varAttributes = objTemp.GetAttributes
  11.                Exit For
  12.            End If
  13.        End If
  14.    Next
  15.   'store description lines
  16.   strD = varAttributes(3).TextString & " " _
  17.        & varAttributes(4).TextString & " " _
  18.        & varAttributes(5).TextString
  19.   'message box with description
  20.   MsgBox strD
  21. End Sub

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

使用道具 举报

3

主题

16

帖子

13

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 23:45:28 | 显示全部楼层
好的,我已经研究了很长一段时间如何使用objectDBX,但我不知道如何开始。在我看来,一旦我在forloop中打开每个文件,我应该能够应用我以前的脚本来访问描述行。有人能帮我解释一下语法吗?
 
谢谢
老虎1337
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 23:54:03 | 显示全部楼层
ObjectDBX无法使用“ThisDrawing.ActiveLayout”对象。就这一点而言,“ThisDrawing”也不是。查看此线程中的代码示例,以了解隔离特定块的方法。
 
http://www.cadtutor.net/forum/showthread.php?26666
 
我怀疑您需要隔离与布局相关的块,然后执行搜索以返回块引用“BORDERA”。
回复

使用道具 举报

3

主题

16

帖子

13

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-7 00:03:51 | 显示全部楼层
好的,我在objectDBX方面取得了进展。下面是我如何使用它的一个片段:
 
  1. Dim dbxDoc As AXDBLib.AxDbDocument
  2. Set dbxDoc = Application.GetInterfaceObject("ObjectDBX.AxDbDocument.17")
  3. dbxDoc.Open (strPath & "" & strList(intJ))
  4. Set dbxDoc = Nothing

 
我想知道最后一行代码是否正确地关闭了文件。我仍然不熟悉所有语法,我知道在程序中正确关闭文件很重要。上面的代码将在for循环中(除了dim语句)。最后一行代码会关闭文件吗?或者这对于objectDBX甚至都不是必需的?
 
~老虎1337
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-21 21:05 , Processed in 0.296086 second(s), 83 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表