明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 223|回复: 3

可视化测量动态输入到excel表

[复制链接]
发表于 前天 21:28 | 显示全部楼层 |阅读模式
各位大老好,有个问题需要请大老们帮助修改,

功能是:在图上测量距离动态输入excel活动工作表,

现在是可以从第一行开逐行输入结果,但是 每从新 启命令时 就有会从第一行开逐行输入,这样就会掩盖老数据,

请大老们帮忙修改修改,谢谢各位了!


;可视化测量======每从新 启命令时 就有会从第一行开逐行输入,这样就会掩盖老数据,
(defun c:qqt1234 (/ pt pt3 pt4 ww msg df pts dist1 dist2 p1 excel workbooks workbook worksheet row M)

    (setq M 1)
       
    ;;;--- 写入Excel ---
    (setq row 2) ; 初始化Excel行号
    (setq excel (vlax-get-or-create-object "Excel.Application"))
    (setq workbooks (vlax-get-property excel 'Workbooks))
    (if (= (vlax-get-property workbooks 'count) 0)
        (setq workbook (vlax-invoke-method workbooks 'Add))
        (setq workbook (vlax-get-property workbooks 'item 1))
    )
    (setq worksheet (vlax-get-property (vlax-get-property workbook 'Worksheets) 'item 1))
       
    ;;;-------------------------------;;;--- 写入Excel ---          ;;;--- 首次运行时添加标题行 ---
      (vlax-put-property (vlax-get-property worksheet 'Range "A1") 'Value2 "测量名称")
      (vlax-put-property (vlax-get-property worksheet 'Range "B1") 'Value2 "线段序号")
      (vlax-put-property (vlax-get-property worksheet 'Range "C1") 'Value2 "分段长度")
      (vlax-put-property (vlax-get-property worksheet 'Range "D1") 'Value2 "累计长度")
          ;(setq row 2) ; 初始化Excel行号
       
    (while (progn
        ; 弹出对话框输入自定义名称
        (setq pt3 (getstring T "\n请输入自定测量名称: "))
        (if (not (equal pt3 "")) ; 如果输入不为空则继续测量
            (progn
                (setq pt (getpoint "\n 请指定开始点: "))
                (setq p1 (getpoint pt "\n 请指定下一点: "))
                (setq dist1 (distance p1 pt))
                (princ (strcat "\n 本段长度" (rtos dist1 2 2)))
                                                       
                ;);================写入Excel
                (vlax-put-property (vlax-get-property worksheet 'Range (strcat "a" (itoa row))) 'Value2 pt3)
                (vlax-put-property (vlax-get-property worksheet 'Range (strcat "b" (itoa row))) 'Value2 "1")
                (vlax-put-property (vlax-get-property worksheet 'Range (strcat "c" (itoa row))) 'Value2 (rtos dist1 2 2))

                (grdraw pt p1 1 1)
                (if p1
                    (progn
                        (setq pts (list p1 pt))
                        (setq dist1 (distance (car pts) (cadr pts)))
                        (princ (strcat " 累计长度" (rtos dist1 2 2)))
                                                                                       
                        ;;--- 写入Excel ---
                        (vlax-put-property (vlax-get-property worksheet 'Range (strcat "d" (itoa row))) 'Value2 (rtos dist1 2 2))
                                                                                          (setq row (1+ row)) ;
                                                                                       
                        (setq M 1)
                        (while (progn
                            (initget 128 "F")
                            (setq pt (getpoint p1 "\n 下一点[下一点(N)/重新开始点(F)]: "))
                            (cond
                                ((= pt "F")
                                    (setq p1 (getpoint "\n 请指定重新开始点: "))
                                    (grdraw pt p1 1 1)
                                    (setq pts (list p1))
                                    (setq dist1 0)
                                    t ; 继续循环
                                )
                                (pt
                                    (setq pts (cons pt pts))
                                    (grdraw p1 pt 1 1)
                                    (setq dist2 (distance p1 pt))
                                    (princ (strcat "\n 本段长度" (rtos dist2 2 2)))
                                    (setq dist1 (+ dist1 dist2))
                                    (princ (strcat " 累计长度" (rtos dist1 2 2)))
                                                                                                                                       
                                        ;;;--- 写入Excel ---
                                    (vlax-put-property (vlax-get-property worksheet 'Range (strcat "a" (itoa row))) 'Value2 pt3)
                                    (vlax-put-property (vlax-get-property worksheet 'Range (strcat "b" (itoa row))) 'Value2 (rtos (1+ M) 2 0))
                                    (vlax-put-property (vlax-get-property worksheet 'Range (strcat "c" (itoa row))) 'Value2 (rtos dist2 2 2))
                                    (vlax-put-property (vlax-get-property worksheet 'Range (strcat "d" (itoa row))) 'Value2 (rtos dist1 2 2))
                                    (setq row (1+ row))
                                                                                                                                       
                                    (setq p1 pt)
                                    (setq M (1+ M))
                                    t ; 继续循环
                                )
                                (t nil) ; 退出循环
                            )
                        ))
                        (princ (strcat "\n(总长度" (rtos dist1 2 0) ")>>>>>>>"))
                       ;(princ (strcat "(共测量了" (rtos (1+ M) 2 0) "条线)"))                                                                                       
                        (if (zerop dist1)
                            (princ " 零长度尺寸,请重新测量!")
                        )
                    )
                )
                t ; 继续外层循环
            )
            nil ; 输入为空则退出外层循环
        )
    ))
    (princ)
)




回复

使用道具 举报

发表于 昨天 07:53 | 显示全部楼层
;;;看看是不是你想要的


;可视化测量======每从新 启命令时 就有会从第一行开逐行输入,这样就会掩盖老数据,
(defun c:qqt1234 (/ pt pt3 pt4 ww msg df pts dist1 dist2 p1 excel workbooks workbook worksheet row row-count M)
    (setq M 1)
    ;;;--- 写入Excel ---
    (setq row-count 2) ; 初始化Excel行号
    (setq excel (vlax-get-or-create-object "Excel.Application"))
    (setq workbooks (vlax-get-property excel 'Workbooks))
    (if (= (vlax-get-property workbooks 'count) 0)
        (setq workbook (vlax-invoke-method workbooks 'Add))
        (setq workbook (vlax-get-property workbooks 'item 1))
    )
    (setq worksheet (vlax-get-property (vlax-get-property workbook 'Worksheets) 'item 1))
       
  ;; 获取Excel数据的范围========>>>>>>>>>>>>>>>>>>
  (setq excel-range (vlax-get-property worksheet 'UsedRange))
  (setq row-count (vlax-get-property (vlax-get-property excel-range 'Rows) 'Count))  ;; 获取行数
  (setq col-count (vlax-get-property (vlax-get-property excel-range 'Columns) 'Count))  ;; 获取列数
    ;;============================>>>>>>>>>>>>>>>>>>
       
    ;;;-------------------------------;;;--- 写入Excel ---          ;;;--- 首次运行时添加标题行 ---
      (vlax-put-property (vlax-get-property worksheet 'Range "A1") 'Value2 "测量名称")
      (vlax-put-property (vlax-get-property worksheet 'Range "B1") 'Value2 "线段序号")
      (vlax-put-property (vlax-get-property worksheet 'Range "C1") 'Value2 "分段长度")
      (vlax-put-property (vlax-get-property worksheet 'Range "D1") 'Value2 "累计长度")
          ;(setq row 2) ; 初始化Excel行号
    (while (progn
        ; 弹出对话框输入自定义名称
        (setq pt3 (getstring T "\n请输入自定测量名称: "))
        (if (not (equal pt3 "")) ; 如果输入不为空则继续测量
            (progn
                (setq pt (getpoint "\n 请指定开始点: "))
                (setq p1 (getpoint pt "\n 请指定下一点: "))
                (setq dist1 (distance p1 pt))
                (princ (strcat "\n 本段长度" (rtos dist1 2 2)))
                                                      
                ;);================写入Excel
                (vlax-put-property (vlax-get-property worksheet 'Range (strcat "a" (itoa row-count))) 'Value2 pt3)
                (vlax-put-property (vlax-get-property worksheet 'Range (strcat "b" (itoa row-count))) 'Value2 "1")
                (vlax-put-property (vlax-get-property worksheet 'Range (strcat "c" (itoa row-count))) 'Value2 (rtos dist1 2 2))

                (grdraw pt p1 1 1)
                (if p1
                    (progn
                        (setq pts (list p1 pt))
                        (setq dist1 (distance (car pts) (cadr pts)))
                        (princ (strcat " 累计长度" (rtos dist1 2 2)))
                                                                                       
                        ;;--- 写入Excel ---
                        (vlax-put-property (vlax-get-property worksheet 'Range (strcat "d" (itoa row-count))) 'Value2 (rtos dist1 2 2))
                                                                                          (setq row-count (1+ row-count)) ;
                                                                                       
                        (setq M 1)
                        (while (progn
                            (initget 128 "F")
                            (setq pt (getpoint p1 "\n 下一点[下一点(N)/重新开始点(F)]: "))
                            (cond
                                ((= pt "F")
                                    (setq p1 (getpoint "\n 请指定重新开始点: "))
                                    (grdraw pt p1 1 1)
                                    (setq pts (list p1))
                                    (setq dist1 0)
                                    t ; 继续循环
                                )
                                (pt
                                    (setq pts (cons pt pts))
                                    (grdraw p1 pt 1 1)
                                    (setq dist2 (distance p1 pt))
                                    (princ (strcat "\n 本段长度" (rtos dist2 2 2)))
                                    (setq dist1 (+ dist1 dist2))
                                    (princ (strcat " 累计长度" (rtos dist1 2 2)))
                                                                                                                                       
                                        ;;;--- 写入Excel ---
                                    (vlax-put-property (vlax-get-property worksheet 'Range (strcat "a" (itoa row-count))) 'Value2 pt3)
                                    (vlax-put-property (vlax-get-property worksheet 'Range (strcat "b" (itoa row-count))) 'Value2 (rtos (1+ M) 2 0))
                                    (vlax-put-property (vlax-get-property worksheet 'Range (strcat "c" (itoa row-count))) 'Value2 (rtos dist2 2 2))
                                    (vlax-put-property (vlax-get-property worksheet 'Range (strcat "d" (itoa row-count))) 'Value2 (rtos dist1 2 2))
                                    (setq row-count (1+ row-count))
                                                                                                                                       
                                    (setq p1 pt)
                                    (setq M (1+ M))
                                    t ; 继续循环
                                )
                                (t nil) ; 退出循环
                            )
                        ))
                        (princ (strcat "\n(总长度" (rtos dist1 2 0) ")>>>>>>>"))
                       ;(princ (strcat "(共测量了" (rtos (1+ M) 2 0) "条线)"))                                                                                       
                        (if (zerop dist1)
                            (princ " 零长度尺寸,请重新测量!")
                        )
                    )
                )
                t ; 继续外层循环
            )
            nil ; 输入为空则退出外层循环
        )
    ))
    (princ)
)

评分

参与人数 2明经币 +2 收起 理由
758586 + 1 很给力!
自贡黄明儒 + 1

查看全部评分

回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 11:00 | 显示全部楼层
谢谢师傅辛苦了!
有点小问题加载命令后会吃掉一行
回复 支持 反对

使用道具 举报

发表于 昨天 11:49 | 显示全部楼层
(setq row-count (vlax-get-property (vlax-get-property excel-range 'Rows) 'Count))  ;; 获取行数
修改为:(setq row-count (+ 1 (vlax-get-property (vlax-get-property excel-range 'Rows) 'Count)))  ;; 获取行数+1

评分

参与人数 1明经币 +1 收起 理由
758586 + 1 谢谢师傅辛苦了!

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-4 06:37 , Processed in 0.180048 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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