乐筑天下

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

[编程交流] 如何从中提取信息

[复制链接]

4

主题

17

帖子

13

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 08:32:37 | 显示全部楼层
我测试了一下,似乎AutoCAD不允许人们在AutoCAD之外使用ObjectDBX。。。
 
当我使用AutoCAD VBA宏提取这几百个图形时,只需要大约5分钟,比2小时快得多。但是我需要Excel。。。。
 
顺便问一下,您知道使用Excel宏运行AutoCAD VBA宏的方法吗?
 
或者,您知道如何使AutoCAD宏成为菜单项吗?所以用户可以点击该菜单并运行宏。
回复

使用道具 举报

48

主题

1073

帖子

1043

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
238
发表于 2022-7-6 08:35:55 | 显示全部楼层
阿斯米显然比我更了解他的东西,但你在excel中需要什么格式?我将边界信息导出到csv文件中,并用excel打开该文件。这是你的选择吗?
回复

使用道具 举报

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-6 08:41:24 | 显示全部楼层
 
似乎。。。尽管所有属性和方法都是可见的,但程序仍会给出一个错误。
 
但是,可以从Autocad中很好地访问Excel。将引用设置为Excel并尝试:
 
  1. Function GetExcelObject() As Object
  2. Set GetExcelObject = CreateObject("Excel.Application")
  3. End Function

 
 
这很简单,我明天会告诉你。对不起,我再次坐到凌晨1:45。明天(今天)我应该早上6点起床上班。睡觉
回复

使用道具 举报

4

主题

17

帖子

13

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 08:42:03 | 显示全部楼层
感谢您的回复,以下是我用来访问Excel的内容:
  1. apExcel=getObject(,"Excel.Application")
  2. apExcel.ActiveSheet.Cells(1,1)="xxxx"

它将尝试控制当前打开的Excel文件,然后对其进行更改。我想的是,使用Excel宏打开AutoCAD,然后自动加载AutoCAD VBA宏并运行它。
我知道在两个应用程序之间来回跳转是不好的,但这似乎是我唯一的选择。
 
我想做的是:
尝试更新Excel文件,该文件列出数百张图纸的图纸编号、说明、修订号、修订日期等。
回复

使用道具 举报

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-6 08:46:42 | 显示全部楼层
 
我认为可以运行AutoCAD宏>使用ObjectDBX打开图形并查找属性(在AutoCAD中工作快速且良好)>从AutoCAD打开Excel并用数据填充单元格(也很好)。
 
>dbroada公司
 
太好了。然而,老家伙想要完全自动化和速度。对我们来说,这不仅是结果,也是编程过程,我们学到了很多新的东西
回复

使用道具 举报

48

主题

1073

帖子

1043

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
238
发表于 2022-7-6 08:49:39 | 显示全部楼层
这就是为什么我要求澄清他的使用。
 
我可以看出你给了他很好的建议,但如果他只想要一个文件名与标题(或类似)的列表,他不需要把它复杂化这么多。
回复

使用道具 举报

4

主题

17

帖子

13

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 08:52:37 | 显示全部楼层
我不想把事情弄得那么复杂,但我想让事情尽可能的人性化。所以您知道在Excel宏中自动运行AutoCAD宏的方法吗?喜欢发送VBALoad命令并加载特定宏,然后以某种方式运行它?
 
因为当人们想要更新电子表格时,他们会首先打开电子表格。
 
谢谢
回复

使用道具 举报

4

主题

17

帖子

13

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 08:54:23 | 显示全部楼层
嗯,我找到了方法,只需将AutoCAD宏嵌入空白图形中,然后在打开空白图形时自动运行宏。丑陋,但工作。
 
ASMI,您能告诉我如何制作一个自定义的autocad菜单项,该菜单项链接到autocad VBA宏吗?
谢谢
回复

使用道具 举报

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-6 08:58:47 | 显示全部楼层
 
好啊
 
大多数人使用(命令“\u vbaload”…加载VBA项目和(命令“\u vbarun”...  用于运行程序。然而,这对我来说并不愉快,因为这些命令不会返回关于成功结束的值,并且在反复尝试加载项目时,会出现警报窗口“project Xxxx”。vdb已加载'。我使用自己的VisualLISP函数来摆脱这些缺陷。它具有以下语法:
 
  1. (asmi_RunMacro "ProjectName.vdb" "!Module.Macro" Out)

 
如果参数“Out”等于T(True),则函数在成功启动宏时返回T,在失败时返回NIL(False)。如果参数“Out”等于NIL,则该函数不返回任何值,只返回有关命令行中错误的消息。
 
对于按钮(或弹出菜单)宏,您应该写短*。lsp文件例如:
 
  1. (defun c:numb()
  2. (asmi_RunMacro "AsmiTools.dvb" "!Numerator.Numerator_Show" nil)
  3. ); end c:numb

 
在这种情况下,按钮的宏应如下所示:
 
  1. ^C^Cnumb

 
或命令行中的“numb”。
 
带有短lisp的文件和带有以下代码的文件应添加到“工具>加载应用程序…”。。。启动套件'
 
 
  1. (defun asmi_GetVBEObject(errMess / vbeObj)
  2. (if
  3.    (vl-catch-all-error-p
  4.      (setq vbeObj
  5.      (vl-catch-all-apply
  6.        'vla-get-VBE
  7.        (list(vlax-get-acad-object))
  8.        ); end vl-catch-all-apply
  9.     ); end setq
  10.      ); end vl-catch-all-error-p
  11.    (progn
  12.      (if errMes
  13. (alert errMess)
  14. ); end if
  15.      nil
  16.      ); end progn
  17.    vbeObj
  18.    ); end if
  19. ); end of asmi_GetVBEObject
  20. (defun asmi_GetVBAProjectsList(/ vbeObj vbaProj pCount
  21.                        projLst curProj prName)
  22. (if
  23.    (setq vbeObj
  24.    (asmi_GetVBEObject ">>> ERROR. Can't get VBE object! <<<"))
  25.    (progn
  26.   (setq vbaProj
  27.          (vlax-get-property vbeObj 'VBProjects)
  28.         pCount
  29.          (vlax-get-property vbaProj 'Count)
  30.         projLst '()
  31.         ); end setq
  32.      (while(/= pCount 0)
  33. (if
  34.   (and
  35.    (not
  36.     (vl-catch-all-error-p
  37.       (setq curProj
  38.              (vl-catch-all-apply
  39.                'vlax-invoke-method
  40.                (list vbaProj 'Item pCount)
  41.                ); end vl-catch-all-apply
  42.             ); end setq
  43.       ); end vl-catch-all-error-p
  44.     ); end not
  45.   (not
  46.     (vl-catch-all-error-p
  47.       (setq prName
  48.              (vl-catch-all-apply
  49.                'vlax-get-property
  50.                (list curProj 'FileName)
  51.                ); end vl-catch-all-apply
  52.             ); end setq
  53.       ); end vl-catch-all-error-p
  54.     ); end not
  55.    ); end and
  56.    (setq projLst
  57.        (append projLst
  58.                (list prName)
  59.                ); end append
  60.       ); end setq
  61.   ); end if
  62. (setq pCount(1- pCount))
  63. ); end while
  64.      ); end progn
  65.    ); end if
  66. projLst
  67. ); end of asmi-GetVBAProjectsList
  68. (defun asmi_RunMacro(Project Macro Out / acApp dvbPath
  69.              actDoc errMes outVal lFlag )
  70. (setq acApp
  71. (vlax-get-acad-object))
  72. (if
  73.    (not
  74.      (member Project
  75.       (asmi_GetVBAProjectsList)))
  76.   (if
  77.     (setq dvbPath
  78.            (findfile Project))
  79.       (if
  80.          (vl-catch-all-error-p
  81.                  (vl-catch-all-apply
  82.                    'vla-loaddvb
  83.                    (list acApp dvbPath)
  84.                    ); end vl-catch-all-apply
  85.                  ); end vl-catch-all-error-message
  86.               (princ
  87.                 (strcat "\n>>> ERROR. Can't load VBA project ""
  88.                         Project "" >>> ")
  89.                 ); end princ
  90.         (setq lFlag T)
  91.         ); end if
  92.     (princ
  93.       (strcat "\n>>> ERROR. VBA project ""
  94.               Project "" not found! <<< "); end strcat
  95.       ); end princ
  96.     ); end if
  97.    (setq lFlag T)
  98.    ); end if
  99. (if lFlag
  100.    (if
  101.       (vl-catch-all-error-p
  102.    (vl-catch-all-apply
  103.      'vla-runmacro
  104.         (list acApp
  105.                 (strcat Project Macro)
  106.                 ); end list
  107.            ); end vl-catch-all-apply
  108.         ); end vl-catch-all-error-message
  109.         (princ
  110.           (strcat "\n>>> ERROR. Can't run VBA macro ""
  111.                   Macro "" >>> ")
  112.         ); end princ
  113.         (setq outVal T)
  114. ); end if
  115.    ); end if
  116.    (if Out outVal(princ))
  117. ); end of asmi_RunMacro
  118. (vl-load-com)
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 09:00:49 | 显示全部楼层
我还尝试对一些从tif格式转换为autocad的图形执行相同的操作?如何做到这一点?请告知。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-9 21:17 , Processed in 0.824239 second(s), 70 queries .

© 2020-2025 乐筑天下

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