明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1438|回复: 4

求助:我想把CAD标注值用“+”连接,并将计算式输入到WPS表格激活状态的单元格中

[复制链接]
发表于 2025-8-27 09:51:01 | 显示全部楼层 |阅读模式
求助:我想把CAD标注值用“+”连接,并将计算式输入到WPS表格激活状态的单元格中,目前不能输入到WPS表格中,求指导。
(defun c:sdm (/ fuh i num obj ss str str1 excelApp wb ws activeCell)
  (vl-load-com) ; 加载COM组件支持
  
  ;; 步骤1:选择CAD中的标注对象
  (setq ss (ssget '((0 . "DIMENSION")))) ; 仅选择标注对象
  (if (not ss)
    (progn (princ "\n错误:未选择任何标注对象!") (princ) (return)) ; 无选择时退出
  )

  ;; 步骤2:初始化变量并提取标注值
  (setq fuh "+"
        num 0   ; 累加总和(修正原代码初始值1的错误)
        str ""  ; 拼接标注值字符串(米为单位)
        i 0     ; 循环计数器
  )
  
  (repeat (sslength ss)
    (setq obj (vlax-ename->vla-object (ssname ss i)) ; 获取标注对象
          str1 (vla-get-measurement obj) ; 读取标注测量值(毫米)
          i (1+ i)
    )
    ;; 转换为米并格式化(保留3位小数,小数格式)
    (setq str (strcat str
                      (if (= i 1) "" "+") ; 第一个值前不加"+"
                      (rtos (/ str1 1000.0) 1 3) ; 1=小数格式,3=3位小数
              )
          num (+ num (/ str1 1000.0)) ; 累加总和(米为单位)
    )
  )

  ;; 步骤3:将字符串str写入WPS/Excel激活单元格
  (if (and str (/= str "")) ; 确保str有内容
    (progn
      ;; 尝试连接WPS(优先)或Excel
      (setq excelApp (vl-catch-all-apply 'vlax-get-object '("Ket.Application"))) ; WPS进程
      (if (vl-catch-all-error-p excelApp) ; 若WPS未打开,尝试Excel
        (setq excelApp (vl-catch-all-apply 'vlax-get-object '("Excel.Application")))
      )
      
      ;; 若未找到进程,新建WPS/Excel实例
      (if (vl-catch-all-error-p excelApp)
        (setq excelApp (vlax-get-or-create-object (if (findfile "ket.exe")  "Ket.Application" "Excel.Application")))
      )
      
      ;; 写入激活单元格
      (if (not (vl-catch-all-error-p excelApp))
        (progn
          (setq wb (vlax-get-property excelApp 'ActiveWorkbook) ; 获取活动工作簿
                ws (vlax-get-property wb 'ActiveSheet)          ; 获取活动工作表
                activeCell (vlax-get-property ws 'ActiveCell)   ; 获取激活单元格
          )
          (vlax-put-property activeCell 'Value str) ; 将str写入单元格
          (vlax-put-property excelApp 'Visible :vlax-true) ; 显示WPS/Excel窗口
          (princ (strcat "\n成功写入标注值到表格:" str))
        )
        (princ "\n错误:无法连接WPS或Excel,请确保已安装!")
      )
    )
    (princ "\n错误:未提取到标注值,无法写入表格!")
  )

  (redraw)
  (princ) ; 清理命令行
)
回复

使用道具 举报

发表于 2025-8-27 10:15:25 | 显示全部楼层
也许可以复制到剪贴板

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-8-27 10:33:18 | 显示全部楼层
forestgxc 发表于 2025-8-27 10:15
也许可以复制到剪贴板

填到图纸上我有的,我把写到getpoint的代码删除了,我是想写到wps表格,鼠标所在单元格
回复 支持 反对

使用道具 举报

发表于 2025-8-27 14:28:25 | 显示全部楼层
本帖最后由 fangmin723 于 2025-8-27 14:52 编辑

代码一看就是AI写的,不能完全依靠AI,一些基本的知识储备是必须的

还有部分建议,建议尽可能是使用乘法,非必要不使用除法,
(/ str1 1000.0) => (* str1 0.001)或者(* str1 1e-3)

activecell在application下
(vlax-get-property excelApp 'ActiveCell)
(vlax-put-property activeCell 'Value2 str)

命令: !str "5.836E-02+3.417E-02+7.440E-02"
命令: (setq activeCell (vlax-get-property excelApp 'ActiveCell)) #<VLA-OBJECT
Range 16130c9c>
命令: (vlax-put-property activeCell 'Value str) too few actual parameters
命令: (vlax-put-property activeCell 'Value2 str) nil

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2025-8-30 15:51:28 | 显示全部楼层
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-22 09:10 , Processed in 0.187813 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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