Lee Mac 发表于 2022-7-6 07:29:24

 
这很奇怪,也许可以试试这个:
^C^C(startapp "explorer" (findfile "J:/General Engineering/AutoCAD/Autocad/Lisp Routine 2012/SteelUK001202.xls"))

Jasenc 发表于 2022-7-6 07:34:06

李,
 
这就像是一种享受,
非常感谢你的帮助!!!!

Lee Mac 发表于 2022-7-6 07:37:26

不客气!
显然,Explorer应用程序只能接受带有反斜杠分隔符的文件路径。

Jasenc 发表于 2022-7-6 07:41:43

李,我只是太挑剔了。这个我试图打开的xls文件,可以用你帮我解决的代码打开,唯一的问题是它不能用excel打开。它是通过浏览器打开的。有没有办法直接用excel打开它?

Bill Tillman 发表于 2022-7-6 07:45:39

这里是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

Jasenc 发表于 2022-7-6 07:48:22

感谢您的回复,
因此,当它声明ExcelFile$I时,可以用J替换它:\\General Engineering\\AutoCAD\\Autocadlisp\\Lisp例程2013\\titleblock。xls对吗?
如果我不希望它在excel中打开特定的工作表,我可以从这个例程中删除什么?

Bill Tillman 发表于 2022-7-6 07:51:56

是的,这是正确的,但是这个例程的调用就像他在代码头中展示语法示例一样。至于第二个问题,只需在他的语法示例中使用第二个示例。这会将文件打开到默认工作表,该工作表将是上次保存时激活的最后一张工作表。
 
有很多其他方法可以在运行中创建新文件,等等。。。但我通常使用。NET来完成这些任务。VLISP可以很好地使用它,但它不是最快速的方法,而且它也仅限于安装了AutoCAD的用户。每个座位5000美元(我们刚刚支付了2013年的年度订阅税和销售税),这是一个昂贵的选择。您可以免费下载新的Visual Studio 2012 Express。。。。我喜欢这个价格。。。在将Excel和AutoCAD连接在一起方面做得更多。

Lee Mac 发表于 2022-7-6 07:55:32

您也可以使用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表达式中使用该路径。

Jasenc 发表于 2022-7-6 07:57:15

谢谢你们,非常感谢你们的帮助
页: 1 [2]
查看完整版本: 打开excel排列的宏