明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1833|回复: 14

[讨论] excel明明已经打开,(vlax-get-object "Excel.Application")失败,解决办法

[复制链接]
发表于 2025-8-12 13:03:39 | 显示全部楼层 |阅读模式
自从电脑自动升级到win11以,总是问题不断。excel明明已经打开,(vlax-get-object "Excel.Application")返回nil,导致我从excel拷贝数据失败 excel=>CAD就不能用了。我想了很久,今天终于找到了一个办法。为了大家少走弯路,分享解决办法。
1 先在VBA中,取得打开的excel文件路径,此程序由红日提供
2 用lisp运行(vlax-get-object "Excel.Application"),如果返回nil,那么就关闭所有excel进程,重新打开VBA保存的excel文件名。
3 VBA程序和lisp程序通信由 变量“userS1"来实现。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

发表于 2025-8-12 20:56:57 | 显示全部楼层
这个重要,truetable也是莫名其妙的不能用了,后来又能用了,都不知道怎么回事,标记一下此贴。
回复 支持 1 反对 0

使用道具 举报

发表于 2025-8-12 16:11:13 | 显示全部楼层
杀死所有excel进程就行了吧,
问AI  脚本 文件  编写一个一个bat文件,要求   扫描所有excel进程,并且关闭
AI答案如下:

@echo off
setlocal enabledelayedexpansion

:: 记录日志到文件
set "logfile=ExcelProcessLog_%date:~0,4%%date:~5,2%%date:~8,2%.txt"
echo [%time%] 脚本启动 > "%logfile%"

:: 检测是否存在Excel进程
tasklist /FI "IMAGENAME eq EXCEL.EXE" | find "EXCEL.EXE" >nul
if %errorlevel% equ 0 (
    echo [%time%] 检测到正在运行的Excel进程 >> "%logfile%"
   
    :: 关闭所有Excel进程
    taskkill /IM EXCEL.EXE /F
    if %errorlevel% equ 0 (
        echo [%time%] 成功关闭所有Excel进程 >> "%logfile%"
        msg * "已关闭全部 %errorlevel% 个Excel进程!"
    ) else (
        echo [%time%] 关闭失败,请检查权限 >> "%logfile%"
    )
) else (
    echo [%time%] 未发现Excel进程 >> "%logfile%"
)

:: 显示最终状态
echo --------------------------
if exist "%logfile%" type "%logfile%"
echo --------------------------
echo 操作已完成,按任意键退出...
pause >nul
回复 支持 反对

使用道具 举报

发表于 2025-8-12 16:17:59 | 显示全部楼层
本帖最后由 kozmosovia 于 2025-8-12 17:06 编辑

我印象中,用VL代码好像是不能彻底关闭Excel进程的。得手动从任务管理器里停止才行。有些Excel被修改了,杀死进程时会提示是否保存,也是VL不能捕捉和干预的。
现代的方式可以是使用Shell以管理员方式调用powershell来kill掉,代码没有测试过
  1. (vlax-invoke-method
  2.     (vlax-create-object "Shell.Application")
  3.     "shellexecute"
  4.     "powershell.exe"
  5.     "Stop-Process -Name 'Excel' -Force"
  6.     ""
  7.     "runas"
  8.     0
  9.   )
复制代码


回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-8-12 13:05:47 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2025-8-12 13:08 编辑

使用方法:(setq *Excel* (vlxls-app-Get-or-Open))

经验证:在bricscad autocad均可以。
回复 支持 反对

使用道具 举报

发表于 2025-8-12 13:59:57 | 显示全部楼层
没有很好的释放Excel的对象,Excel还在进程中没有关闭,才导致获取失败
回复 支持 反对

使用道具 举报

发表于 2025-8-12 17:59:53 | 显示全部楼层
好像也遇到过,我的土办法是关闭重启。
回复 支持 反对

使用道具 举报

发表于 2025-8-12 21:33:33 | 显示全部楼层
本帖最后由 你有种再说一遍 于 2025-8-12 22:07 编辑

现在的PowerShell就是.NET函数库,而且可以外部操作.
结束进程之后com断开,才能再次启动.
你可以试试,直接获取exe路径进行启动,这样就是无com的.
再链接com进行通讯...
有没有试过切换cad文档?然后再次载入指定lisp代码?
回复 支持 反对

使用道具 举报

发表于 2025-8-12 21:57:24 | 显示全部楼层
kozmosovia 发表于 2025-8-12 16:17
我印象中,用VL代码好像是不能彻底关闭Excel进程的。得手动从任务管理器里停止才行。有些Excel被修改了,杀 ...

不知道是不是没有释放完变量或者excel异常了。
回复 支持 反对

使用道具 举报

发表于 2025-8-12 22:25:21 | 显示全部楼层
不杀Excel进程的方式,是直接强制再新启动一个Excel
(or (setq xlapp (vlax-get-object "Excel.Application")
     (setq xlapp  (vlax-create-object "Excel.Application")
)
或者修改代码,用vlax-create-object替换vlax-get-or-create-object
这样的问题会是无法从之前启动的Excel中取数据。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2026-1-12 04:09 , Processed in 0.151117 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表