求助:我想把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
也许可以复制到剪贴板
填到图纸上我有的,我把写到getpoint的代码删除了,我是想写到wps表格,鼠标所在单元格 本帖最后由 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
http://bbs.mjtd.com/thread-193503-1-1.html
页:
[1]