乐筑天下

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

超链接文件操作

[复制链接]

55

主题

190

帖子

5

银币

后起之秀

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

铜币
410
发表于 2009-5-1 09:10:50 | 显示全部楼层 |阅读模式
嘿,盖伊'我在一个图形中有许多块,所有块都有指向服务器上与块相关的PDF文档库的超链接
我的问题;是否有Lisp或VBA可以复制这些内容;“超链接”;PDF将图纸剪切到名为“剪切图纸”的新目录,该目录将位于当前项目类型目录树中
标记
回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2009-5-1 09:20:29 | 显示全部楼层
那么,您想扫描所有块,找到任何超链接,然后将超链接指向的文件复制到项目文件夹
假设这确实是你想要做的,这应该行得通
你'我需要添加对Microsoft脚本运行时的引用
  1. Option Explicit
  2. Public Sub Main()
  3.     Dim objBlock As AcadBlockReference
  4.     Dim objEnt As AcadEntity
  5.     Dim colHyps As AcadHyperlinks
  6.     Dim fso As FileSystemObject
  7.    
  8.     Set fso = New FileSystemObject
  9.    
  10.     For Each objEnt In ThisDrawing.ModelSpace
  11.         If TypeOf objEnt Is AcadBlockReference Then
  12.             Set objBlock = objEnt
  13.             Set colHyps = objBlock.Hyperlinks
  14.             On Error Resume Next [color=green]' In case we encounter any blocks that DON'T have hyperlinks[/color]
  15.             fso.CopyFile colHyps.Item(0).URL, "E:\Temp"  [color=green]' replace E:\Temp\ with your project directory[/color]
  16.         End If
  17.     Next objEnt
  18.    
  19.     Set fso = Nothing
  20. End Sub

回复

使用道具 举报

55

主题

190

帖子

5

银币

后起之秀

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

铜币
410
发表于 2009-5-1 12:03:42 | 显示全部楼层
马特,谢谢你的快速回复!你提到Microsoft运行时脚本?我需要买些软件吗?或者引用一个我已经准备好的软件?(在PO Gramming上非常新)。参见代码中的注释 Dim objBlock As AcadBlockReference作为对象块参考 模糊对象作为身份 暗colHyps作为AcadHyperlinks 将fso设置为文件系统对象&nbsp
 设置fso=New FileSystemObject&nbsp
 对于本图纸中的每个对象。模型空间&nbsp&nbsp 如果对象的类型是AcadBlockReference,则&nbsp&nbsp&nbsp&nbsp 设置objBlock=objEnt&nbsp&nbsp&nbsp&nbsp 设置colHyps=objBlock。超链接&nbsp&nbsp&nbsp&nbsp 出错时继续下一步'如果我们遇到任何不'T有超链接(有没有办法让程序使用当前工作图来知道路径?)
&nbsp&nbsp&nbsp&nbsp fso。CopyFile colHyps。项(0)。URL,"E: “温度”&nbsp' 将E:\Temp\替换为项目目录(这将是PDF源文件?)
&nbsp&nbsp 如果结束 下一个目标&nbsp
 设置fso=Nothing

回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2009-5-1 13:16:26 | 显示全部楼层
要添加对Microsoft脚本运行时的引用,请在IDE中单击工具-引用(请参见第一个图像),然后选择Microsoft脚本运行时间(请参见第二个图像)
回复

使用道具 举报

55

主题

190

帖子

5

银币

后起之秀

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

铜币
410
发表于 2009-5-1 13:53:52 | 显示全部楼层
Matt,再次感谢您抽出时间查看代码中的注释
选项显式 Dim objBlock As AcadBlockReference作为对象块参考 模糊对象作为身份 暗colHyps作为AcadHyperlinks 将fso设置为文件系统对象&nbsp
 设置fso=New FileSystemObject&nbsp
 对于本图纸中的每个对象。模型空间&nbsp&nbsp 如果对象的类型是AcadBlockReference,则&nbsp&nbsp&nbsp&nbsp 设置objBlock=objEnt&nbsp&nbsp&nbsp&nbsp 设置colHyps=objBlock。超链接&nbsp&nbsp&nbsp&nbsp 出错时继续下一步'如果我们遇到任何不'T有超链接(有没有办法让程序使用当前工作图来知道路径?)
你是指当前的图纸吗;s位置 那条路??!?(是的,当前工作图纸位于项目目录中,项目目录中也有一个名为Cut_Sheets的目录。这是我希望PDF剪切图纸结束的地方。)&nbsp&nbsp&nbsp&nbsp fso。CopyFile colHyps。项(0)。URL,"E: “温度”&nbsp' 将E:\Temp\替换为项目目录(这将是PDF源文件?)
文件将复制到此处&nbsp&nbsp 如果结束 下一个目标&nbsp
 设置fso=Nothing
回复

使用道具 举报

55

主题

190

帖子

5

银币

后起之秀

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

铜币
410
发表于 2009-5-1 14:25:39 | 显示全部楼层
马特,这是我写的一个小程序,为我的公司启动一个新项目#039;的具体需求
这可能有助于了解移动超链接剪切图纸的必要性
回复

使用道具 举报

55

主题

190

帖子

5

银币

后起之秀

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

铜币
410
发表于 2009-5-1 15:27:04 | 显示全部楼层
马特,让'例如,我使用数据提取创建BOM表,在模型空间中有5个多块装配图,但在图纸空间布局中仅显示1个装配。还有什么方法可以防止将重复的PDF剪切页移动到同一目录中,或者程序会崩溃,或者它会提示我覆盖出现的任何重复文件吗 此外,我们的项目发生了很大变化,一些块将被删除,其他块将被添加,我再次运行此程序,是否可以删除Cut_Sheet目录中的现有文件,并用新修改的当前图形切割表重新填充
标记
回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2009-5-4 08:10:25 | 显示全部楼层
这将自动删除特定目录中的所有PDF,在本例中为E:\Temp 将其更改为存储PDF的项目文件夹
  1. [color=red]If Len(Dir("E:\Temp\*.pdf"))  0 Then[/color]      [color=green]' Checks to see if there are any PDFs in E:Temp[/color]
  2.     [color=red]fso.DeleteFile "E:\Temp\*.pdf", True[/color]    [color=green]' If there are, delete them[/color]
  3. [color=red]End If[/color]
该行将自动覆盖任何可能与所复制PDF同名的PDF
  1. fso.CopyFile colHyps.Item(0).URL, "E:\Temp", True
当你把这一切放在一起,你会得到这个…
  1. Option Explicit
  2. Public Sub Main()
  3.     Dim objBlock As AcadBlockReference
  4.     Dim objEnt As AcadEntity
  5.     Dim colHyps As AcadHyperlinks
  6.     Dim fso As FileSystemObject
  7.    
  8.     Set fso = New FileSystemObject
  9.     [color=red]If Len(Dir("E:\Temp\*.pdf"))  0 Then[/color]      [color=green]' Checks to see if there are any PDFs in E:Temp[/color]
  10.         [color=red]fso.DeleteFile "E:\Temp\*.pdf", True[/color]    [color=green]' If there are, delete them[/color]
  11.     [color=red]End If[/color]
  12.    
  13.     For Each objEnt In ThisDrawing.ModelSpace
  14.         If TypeOf objEnt Is AcadBlockReference Then
  15.             Set objBlock = objEnt
  16.             Set colHyps = objBlock.Hyperlinks
  17.             On Error Resume Next ' In case we encounter any blocks that DON'T have hyperlinks
  18.             [color=red]fso.CopyFile colHyps.Item(0).URL, "E:\Temp", True[/color]  [color=green]' replace E:\Temp\ with your project directory[/color]
  19.                                                                 [color=green]' The TRUE option will automatically overwrite any existing files with the same name[/color]
  20.         End If
  21.     Next objEnt
  22.    
  23.     Set fso = Nothing
  24. End Sub
回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2009-5-4 08:13:19 | 显示全部楼层

获取当前图纸#039;s位置,可以使用ThisDrawing.Path
要测试它,只需把它放在一个空的SUB中并运行它 它将显示一个对话框,其中包含图形#039;s路径
  1. MsgBox ThisDrawing.Path
然后,您可以使用
  1. MsgBox ThisDrawing.Path & "\Cut_Sheets"
回复

使用道具 举报

55

主题

190

帖子

5

银币

后起之秀

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

铜币
410
发表于 2009-5-4 09:26:42 | 显示全部楼层
马特使用路径
  1. MsgBox ThisDrawing.Path & "\Cut_Sheets"
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-2 06:52 , Processed in 0.626377 second(s), 73 queries .

© 2020-2025 乐筑天下

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