明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1328|回复: 8

[提问] 求助,如何用lisp读取外部TXT文件,写入CAD自带的表格内.

[复制链接]
发表于 2023-6-3 13:39:19 | 显示全部楼层 |阅读模式
30明经币
如题,需要将外部txt格式的文件,读取后写入CAD自带的表格中,表格行数根据所读取的txt文件行数一致,列数为5列,插入表格时可以以窗口的形式插入(即表格对角两点可以拖拽选择表格范围,行宽,列宽以拖拽的表格范围确定,表格文字大小根据表格整体范围相应的缩小或者放大)

发表于 2023-6-3 18:29:01 | 显示全部楼层
把txt用Excel打开分好咧,复制黏贴至CAD中即可
回复

使用道具 举报

发表于 2023-6-4 08:25:34 | 显示全部楼层



直接从剪贴板中读取数据,不局限于Excel还是txt,免费使用

本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2023-6-5 10:59:05 | 显示全部楼层
kozmosovia 发表于 2023-6-3 18:29
把txt用Excel打开分好咧,复制黏贴至CAD中即可

这样太麻烦了  我是需要在lisp里操作生成.
回复

使用道具 举报

发表于 2023-6-5 11:45:44 | 显示全部楼层
(lst2excel (txt2list (fn)))
回复

使用道具 举报

发表于 2023-6-5 11:57:35 | 显示全部楼层
  1. ;;表快速输出 XLS
  2. (defun ls2xls (lst / _List:getRC  XD::Excel:i2ColNo  excel bks acBook sht rc  cells range)
  3. (defun XD::Excel:i2ColNo (a / l _i2ColNo)
  4.   (defun _i2ColNo (num / lst)
  5.     (cond
  6.       ((<= 1 num 26) (setq lst (cons num lst)))
  7.       ((> num 26) (setq lst (append (_i2ColNo (/ num 26)) (list (rem num 26)))))
  8.       (t lst)
  9.     ) lst
  10.   )
  11.   (if (and (>= (setq a (fix (abs a))) 1)
  12.            (setq l (_i2ColNo a))
  13.       )
  14.     (apply 'strcat (mapcar '(lambda (x) (chr (+ 64 x))) l))
  15.   )
  16. )
  17. (setq excel (vlax-get-or-create-object "Excel.Application"))
  18. (vla-put-visible excel :vlax-true)
  19. (setq bks (vlax-get excel 'workbooks)
  20.      acBook (vlax-invoke bks 'Add)
  21.      sht  (vlax-get excel 'ActiveSheet)
  22.      rc   (strcat "A1:"
  23.                (xd::excel:i2ColNo (apply 'max (mapcar 'length lst)))
  24.                (itoa (length lst))
  25.            )
  26.      cells (vlax-get sht 'cells)
  27.      range (vlax-get-property cells 'Range rc)
  28. )
  29. (vlax-put-property range  'value2
  30.     (vlax-safearray-fill
  31.         (vlax-make-safearray
  32.             vlax-vbstring
  33.             (cons 1 (length lst))
  34.             (cons 1 (length (car lst)))
  35.         )
  36.         lst
  37.     )
  38. )
  39. ;(vlax-put-property (vlax-get-property sht "Range" "A:A") "ColumnWidth" 20);列宽20
  40. ;(vlax-put-property (vlax-get-property sht "Range" "1:1") "RowHeight" 30);行高30
  41. )
回复

使用道具 举报

发表于 2023-6-5 12:00:19 | 显示全部楼层
  1. (defun table:List (lst pt rowheight colwidth / tb i maxcol)
  2.   (setq tb (vla-addtable (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
  3.              (vlax-3d-point pt)
  4.              (1+ (length lst))
  5.              (apply 'max (mapcar 'length lst))
  6.              rowheight
  7.              colwidth
  8.            )
  9.   )
  10.   (setq i 0)
  11.   (vla-setalignment tb acdatarow acmiddlecenter)
  12.   (mapcar '(lambda (x / j)
  13.              (setq i (1+ i)  j -1)
  14.              (mapcar '(lambda (a) (vla-settext tb i (setq j (1+ j)) a)) x)
  15.            )
  16.           lst
  17.   )
  18. )

回复

使用道具 举报

发表于 2023-6-15 23:09:48 | 显示全部楼层
给你参考下

;;---------------------=={ Add Table }==----------------------;;
;;                                                            ;;
;;  Creates a VLA Table Object at the specified point,        ;;
;;  populated with title and data                             ;;
;;------------------------------------------------------------;;
;;  Author: Lee Mac, Copyright ?2011 - www.lee-mac.com        ;;
;;------------------------------------------------------------;;
;;  Arguments:                                                ;;
;;  space - VLA Block Object                                  ;;
;;  pt    - Insertion Point for Table                         ;;
;;  title - Table title                                       ;;
;;  data  - List of data to populate the table                ;;
;;------------------------------------------------------------;;
;;  Returns:  VLA Table Object                                ;;
;;------------------------------------------------------------;;

;;;;函数:LM:AddTable
;;;;功能:Add Table -by lee mac
;;;;示例:
;;(setq acdoc (vla-get-activedocument (vlax-get-acad-object))
;;        acspc (vlax-get-property acdoc (if (= 1 (getvar 'CVPORT)) 'Paperspace 'Modelspace))
;;  )
;;
;;(LM:AddTable acspc (trans (getpoint) 1 0) "圆坐标统计" (cons '("标记" "直径" "X" "Y") data))

(defun LM:AddTable ( space pt title data / _isAnnotative textheight style )

  (defun _isAnnotative ( style / object annotx )
    (and
      (setq object (tblobjname "STYLE" style))
      (setq annotx (cadr (assoc -3 (entget object '("AcadAnnotative")))))
      (= 1 (cdr (assoc 1070 (reverse annotx))))
    )
  )

  (
    (lambda ( table ) (vla-put-StyleName table (getvar 'CTABLESTYLE)) (vla-SetText table 0 0 title)
      (
        (lambda ( row )
          (mapcar
            (function
              (lambda ( rowitem ) (setq row (1+ row))
                (
                  (lambda ( column )
                    (mapcar
                      (function
                        (lambda ( item )
                          (vla-SetText table row (setq column (1+ column)) item)
                        )
                      )
                      rowitem
                    )
                  )
                  -1
                )
              )
            )
            data
          )
        )
        0
      )
      table
    )
    (
      (lambda ( textheight )
        (vla-AddTable space (vlax-3D-point pt) (1+ (length data)) (length (car data)) textheight
          (* 0.8 textheight ;;文本高度
            (apply 'max
              (cons (/ (strlen title) (length (car data)))
                (mapcar 'strlen (apply 'append data))
              )
            )
          )
        )
      )
      (* 1.2  ;;表格宽度
        (/
          (setq textheight
            (vla-gettextheight
              (setq style
                (vla-item
                  (vla-item
                    (vla-get-dictionaries (vla-get-document space)) "ACAD_TABLESTYLE"
                  )
                  (getvar 'CTABLESTYLE)
                )
              )
              acdatarow
            )
          )
          (if (_isAnnotative (vla-gettextstyle style acdatarow))
            (cond ( (getvar 'CANNOSCALEVALUE) ) ( 1.0 ))
            1.0
          )
        )
      )
    )
  )
)

;;------------------------------------------------------------;;
;;                         End of File                        ;;
;;------------------------------------------------------------;;
回复

使用道具 举报

 楼主| 发表于 2023-8-3 16:37:54 | 显示全部楼层
LPACMQ 发表于 2023-6-15 23:09
给你参考下

;;---------------------=={ Add Table }==----------------------;;

谢谢  已经解决了  
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 00:31 , Processed in 0.192963 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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