yamjqq 发表于 2025-8-27 09:51:01

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

求助:我想把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) ; 清理命令行
)

forestgxc 发表于 2025-8-27 10:15:25

也许可以复制到剪贴板

yamjqq 发表于 2025-8-27 10:33:18

forestgxc 发表于 2025-8-27 10:15
也许可以复制到剪贴板

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

fangmin723 发表于 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

yy6831817 发表于 2025-8-30 15:51:28

http://bbs.mjtd.com/thread-193503-1-1.html
页: [1]
查看完整版本: 求助:我想把CAD标注值用“+”连接,并将计算式输入到WPS表格激活状态的单元格中