明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2092|回复: 3

[提问] 将lst写出到cad做表,求高手指点....

  [复制链接]
发表于 2014-7-7 14:15:52 | 显示全部楼层 |阅读模式
想模拟院长的xyp-List2TableAuto ,可惜新手太笨,尽是错误代码.
写不下去了,不知道错在哪里~~~只循环一次就没后文了,求高手指点下...
  1. ;将lst写出到cad做表
  2. ;pt表格左上角 LST表 ZG字体高度
  3. ;(LST2TAB (getpoint "\n指定表格左上角") LST 3.5)
  4. (defun lst2tab (pt lst zg)
  5.   (setq h (* zg 2);单元格高
  6.         n (length lst);总行数4
  7.         nn (apply 'max (mapcar 'length lst));子表最大长度,决定总列数11
  8.         len 0
  9.         i 0);循环计数1
  10. (entmake (list '(0 . "LINE") '(62 . 2)  (cons 10 pt) (cons 11 (polar pt (* pi 1.5) (* n h)))));绘制左边第一条竖线
  11. (repeat nn  ;重复写出;repeat1
  12.   (setq lsti (mapcar '(lambda (x) (nth i x)) lst);取相应列数据
  13.         leni  (1+ (apply 'max (mapcar 'strlen lsti)));列宽度
  14.         len (+ len leni)
  15.         pt1 (polar pt 0 len);竖线起点
  16.         ii 0);循环计数2        
  17.    (entmake (list '(0 . "LINE") '(62 . 2)  (cons 10 pt1) (cons 11 (polar pt1 (* pi 1.5) (* n h)))));绘制文字右侧竖线
  18.    (repeat n ;重复写出列文字,repeat2
  19.        (setq str (vl-princ-to-string (nth ii lsti)));取出字符
  20.        (if (not str)(setq str ""))
  21.        (setq pti (polar pt1 pi (* leni 0.5)))
  22.        (setq ptii (polar pti (* pi 1.5) (* (+ 0.5 ii) h)));文字位置
  23.        (entmake (list '(0 . "TEXT") (cons 1 str) (cons 10 ptii)  (cons 73 2) (cons 72 1)  (cons 11 ptii) (cons 40 zg) (cons 41 1.0)));写出文字
  24.        (setq ii (1+ ii))
  25.        );repeat2
  26. (setq i (1+ i))
  27. );repeat1
  28. )
  29. ;==============程序开始===================
  30. (defun C:TT()
  31.   (setq LST '(
  32.              ("项目" "列1" "列2" "列3" "列4" "列5" "列6" "列7")
  33.             ("行1" 1 12 123 1234 12345 123456 1234567 12345678 123456780 1234567890)
  34.              ("行2" 1 12 123 1234 12345 123456 1234567 12345678 123456789)
  35.              ("行3" "后面空" "" "前面空" "1234" "文本" "ABCDE")
  36.             )
  37.             )
  38. (setq pt (getpoint "\n指定表格左上角"))
  39. (setq zg 1)
  40. (LST2TAB pt LST zg)
  41. )

点评

xyp-List2TableAuto……  发表于 2014-7-7 14:21
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2014-7-7 14:29:32 | 显示全部楼层
初步判断,错误发生在这里,当数据为空的时候,就终止了~ 参数类型错误: stringp nil
(setq lsti (mapcar '(lambda (x) (nth i x)) lst);取相应列数据
        leni  (1+ (apply 'max (mapcar 'strlen lsti))));列宽度
发表于 2014-7-7 17:08:38 | 显示全部楼层

可以

d:\QQ图片20140707170557.jpg

本帖子中包含更多资源

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

x
 楼主| 发表于 2014-7-7 20:53:23 | 显示全部楼层
(if (not str)(setq str ""))
这句话好像没起作用啊~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-24 09:39 , Processed in 0.171012 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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