这很奇怪,也许可以试试这个:
^C^C(startapp "explorer" (findfile "J:/General Engineering/AutoCAD/Autocad/Lisp Routine 2012/SteelUK001202.xls")) 李,
这就像是一种享受,
非常感谢你的帮助!!!! 不客气!
显然,Explorer应用程序只能接受带有反斜杠分隔符的文件路径。 李,我只是太挑剔了。这个我试图打开的xls文件,可以用你帮我解决的代码打开,唯一的问题是它不能用excel打开。它是通过浏览器打开的。有没有办法直接用excel打开它? 这里是Terry Miller的GETEXCEL代码的一段代码,您可以在这里找到完整的副本。它工作得很好,还有很多其他用途。特里很友善地与全世界分享了这一点,为此我们向他致以衷心的感谢。
注意:如果不自动加载,则需要在代码中添加以下行。把它放在这段代码中的(defun)语句之前,它会为您做这件事。
(vl-load-com)
;-------------------------------------------------------------------------------
; OpenExcel - Opens an Excel spreadsheet
; Arguments: 3
; ExcelFile$ = Excel filename or nil for new spreadsheet
; SheetName$ = Sheet name or nil for not specified
; Visible = t for visible or nil for hidden
; Syntax examples:
; (OpenExcel "C:\\Temp\\Temp.xls" "Sheet2" t) = Opens C:\Temp\Temp.xls on Sheet2 as visible session
; (OpenExcel "C:\\Temp\\Temp.xls" nil nil) = Opens C:\Temp\Temp.xls on current sheet as hidden session
; (OpenExcel nil "Parts List" nil) =Opens a new spreadsheet and creates a Part List sheet as hidden session
;-------------------------------------------------------------------------------
(defun OpenExcel (ExcelFile$ SheetName$ Visible / Sheet$ Sheets@ Worksheet)
(if (= (type ExcelFile$) 'STR)
(if (findfile ExcelFile$)
(setq *ExcelFile$ ExcelFile$)
(progn
(alert (strcat "Excel file " ExcelFile$ " not found."))
(exit)
);progn
);if
(setq *ExcelFile$ "")
);if
(gc)
(if (setq *ExcelApp% (vlax-get-object "Excel.Application"))
(progn
(alert "Close all Excel spreadsheets to continue!")
(vlax-release-object *ExcelApp%)(gc)
);progn
);if
(setq *ExcelApp% (vlax-get-or-create-object "Excel.Application"))
(if ExcelFile$
(if (findfile ExcelFile$)
(vlax-invoke-method (vlax-get-property *ExcelApp% 'WorkBooks) 'Open ExcelFile$)
(vlax-invoke-method (vlax-get-property *ExcelApp% 'WorkBooks) 'Add)
);if
(vlax-invoke-method (vlax-get-property *ExcelApp% 'WorkBooks) 'Add)
);if
(if Visible
(vla-put-visible *ExcelApp% :vlax-true)
);if
(if (= (type SheetName$) 'STR)
(progn
(vlax-for Sheet$ (vlax-get-property *ExcelApp% "Sheets")
(setq Sheets@ (append Sheets@ (list (vlax-get-property Sheet$ "Name"))))
);vlax-for
(if (member SheetName$ Sheets@)
(vlax-for Worksheet (vlax-get-property *ExcelApp% "Sheets")
(if (= (vlax-get-property Worksheet "Name") SheetName$)
(vlax-invoke-method Worksheet "Activate")
);if
);vlax-for
(vlax-put-property (vlax-invoke-method (vlax-get-property *ExcelApp% "Sheets") "Add") "Name" SheetName$)
);if
);progn
);if
(princ)
);defun OpenExcel
感谢您的回复,
因此,当它声明ExcelFile$I时,可以用J替换它:\\General Engineering\\AutoCAD\\Autocadlisp\\Lisp例程2013\\titleblock。xls对吗?
如果我不希望它在excel中打开特定的工作表,我可以从这个例程中删除什么? 是的,这是正确的,但是这个例程的调用就像他在代码头中展示语法示例一样。至于第二个问题,只需在他的语法示例中使用第二个示例。这会将文件打开到默认工作表,该工作表将是上次保存时激活的最后一张工作表。
有很多其他方法可以在运行中创建新文件,等等。。。但我通常使用。NET来完成这些任务。VLISP可以很好地使用它,但它不是最快速的方法,而且它也仅限于安装了AutoCAD的用户。每个座位5000美元(我们刚刚支付了2013年的年度订阅税和销售税),这是一个昂贵的选择。您可以免费下载新的Visual Studio 2012 Express。。。。我喜欢这个价格。。。在将Excel和AutoCAD连接在一起方面做得更多。 您也可以使用Excel命令行开关。
下面是一个快速示例,演示如何确定要使用的shell命令:
(defun _excelopen ( fn / id )
(if
(and
(setq fn (findfile fn))
(setq id (vl-registry-read (strcat "HKEY_CLASSES_ROOT\\" (vl-filename-extension fn))))
(setq id (vl-registry-read (strcat "HKEY_CLASSES_ROOT\\" id "\\shell\\Open\\command")))
)
(if (vl-string-search "%1" id)
(startapp (vl-string-subst fn "%1" id))
(startapp (strcat id " \"" fn "\""))
)
)
)
不过,如果您知道Excel可执行文件的路径,可以直接在startapp表达式中使用该路径。 谢谢你们,非常感谢你们的帮助
页:
1
[2]