双屏时也让excel窗口强制置前,如何实现?在豆包查了一段代码可不好使。。。

[color=rgba(0, 0, 0, 0.45)];; 2. 确保Excel窗口可见(隐藏状态下置前无效)      (vlax-put-property xlApp "Visible" :vlax-true)      (vlax-put-property xlApp "WindowState" 1) [color=rgba(0, 0, 0, 0.45)]; 1=正常窗口,取消最小化


网友答:
用元宝生成的,我电脑用的WPS,没装office,测试不成这个代码
  1. (vl-load-com)  ;; 加载AutoCAD的ActiveX支持,以便使用COM对象(如Excel)

  2. ;; 定义主函数:OpenExcel
  3. ;; 这个函数可以在AutoCAD命令行中输入"OpenExcel"来调用
  4. (defun c:OpenExcel ( / excel-app workbook file-path result)  ;; 定义命令和局部变量,避免全局污染
  5.   ;; 设置Excel文件路径(注意:路径中的反斜杠要转义为双反斜杠)
  6.   (setq file-path "C:\\Users\\tranque\\Desktop\\你的表格.xlsx");; 改成你表格的路径
  7.   
  8.   ;; 检查文件是否存在,如果不存在则提示用户并退出
  9.   (if (not (findfile file-path))  ;; 使用findfile函数检查路径有效性
  10.     (progn
  11.       (alert "错误:指定的Excel文件不存在,请检查路径。")  ;; 弹出警告对话框
  12.       (exit)  ;; 退出程序
  13.     )
  14.   )
  15.   
  16.   ;; 使用错误处理来捕获可能的异常(如Excel未安装)
  17.   (setq result (vl-catch-all-apply
  18.     (function
  19.       (lambda ( )
  20.         ;; 获取或创建Excel应用程序对象
  21.         (setq excel-app (vlax-get-or-create-object "Excel.Application"))
  22.         ;; 设置Excel为可见状态(默认可能不可见)
  23.         (vlax-put-property excel-app 'Visible :vlax-true)
  24.         ;; 打开指定的工作簿文件
  25.         (setq workbook (vlax-invoke-method excel-app 'Workbooks 'Open file-path))
  26.         ;; 强制最大化Excel窗口(常量-4137代表xlMaximized,这通常会将窗口置前)
  27.         (vlax-put-property excel-app 'WindowState -4137)  ;; 算法点:使用预定义常量优化窗口状态
  28.         ;; 提示用户操作成功(可选,但为了简洁,这里不显示命令行消息)
  29.         ; (princ "Excel文件已打开并置前。")  ;; 注释掉以保持命令行简洁
  30.       )
  31.     )
  32.   ))
  33.   
  34.   ;; 检查错误处理结果:如果出错则提示
  35.   (if (vl-catch-all-error-p result)
  36.     (alert (strcat "错误:无法打开Excel文件。原因: " (vl-catch-all-error-message result)))
  37.   )
  38.   
  39.   ;; 清理COM对象,释放内存(避免内存泄漏)
  40.   (if workbook (vlax-release-object workbook))
  41.   (if excel-app (vlax-release-object excel-app))
  42.   (princ)  ;; 静默退出,不显示命令行消息(满足简洁要求)
  43. )

  44. ;; 函数定义结束



网友答: (vlax-put-property xl 'WindowState -4137)   还是没有置顶。。。

网友答: 用Qwen生成的,我电脑用的lib,你需要自行测试
  1. (defun ForceExcelToFront (xlApp / xlWindow)
  2.   (vl-catch-all-apply
  3.     '(lambda ()
  4.        ;; 1. 确保Excel应用程序可见
  5.        (vlax-put-property xlApp "Visible" :vlax-true)
  6.       
  7.        ;; 2. 恢复窗口状态(如果被最小化)
  8.        (vlax-put-property xlApp "WindowState" -4137) ; xlNormal = -4137
  9.       
  10.        ;; 3. 获取活动窗口并激活
  11.        (if (setq xlWindow (vlax-get-property xlApp "ActiveWindow"))
  12.          (progn
  13.            (vlax-put-property xlWindow "Visible" :vlax-true)
  14.            (vlax-invoke-method xlWindow "Activate")
  15.          )
  16.        )
  17.       
  18.        ;; 4. 激活Excel应用程序本身
  19.        (vlax-invoke-method xlApp "Activate")
  20.       
  21.        ;; 5. 短暂延迟后再次确认(双屏环境有时需要)
  22.        (command "delay" 100)
  23.        (vlax-invoke-method xlApp "Activate")
  24.      )
  25.   )
  26. )

  27. ;; 使用示例
  28. (ForceExcelToFront xlApp)
如果还是不行,可以尝试Windows API方法:
  1. (defun SetForegroundExcel (xlApp / hwnd)
  2.   (vlax-put-property xlApp "Visible" :vlax-true)
  3.   ;; 获取Excel窗口句柄
  4.   (setq hwnd (vlax-get-property xlApp "Hwnd"))
  5.   ;; 使用Windows API强制置前
  6.   (command "_.SHELL"
  7.     (strcat "powershell -Command "Add-Type -TypeDefinition '"
  8.             "[DllImport(\\"user32.dll\\")] public static extern bool SetForegroundWindow(IntPtr hWnd);' "
  9.             "-Name Win32 -Namespace Win32Functions; "
  10.             "[Win32Functions.Win32]::SetForegroundWindow(" (itoa hwnd) ")"")
  11.   )
  12. )




网友答: 我都测试过了 是ok的

qwen很强大的~
  • 上一篇:一键恢复系统变量为初始值(源码)
  • 下一篇:没有了