想模拟院长的xyp-List2TableAuto ,可惜新手太笨,尽是错误代码.
写不下去了,不知道错在哪里~~~只循环一次就没后文了,求高手指点下... - ;将lst写出到cad做表
- ;pt表格左上角 LST表 ZG字体高度
- ;(LST2TAB (getpoint "\n指定表格左上角") LST 3.5)
- (defun lst2tab (pt lst zg)
- (setq h (* zg 2);单元格高
- n (length lst);总行数4
- nn (apply 'max (mapcar 'length lst));子表最大长度,决定总列数11
- len 0
- i 0);循环计数1
- (entmake (list '(0 . "LINE") '(62 . 2) (cons 10 pt) (cons 11 (polar pt (* pi 1.5) (* n h)))));绘制左边第一条竖线
- (repeat nn ;重复写出;repeat1
- (setq lsti (mapcar '(lambda (x) (nth i x)) lst);取相应列数据
- leni (1+ (apply 'max (mapcar 'strlen lsti)));列宽度
- len (+ len leni)
- pt1 (polar pt 0 len);竖线起点
- ii 0);循环计数2
- (entmake (list '(0 . "LINE") '(62 . 2) (cons 10 pt1) (cons 11 (polar pt1 (* pi 1.5) (* n h)))));绘制文字右侧竖线
- (repeat n ;重复写出列文字,repeat2
- (setq str (vl-princ-to-string (nth ii lsti)));取出字符
- (if (not str)(setq str ""))
- (setq pti (polar pt1 pi (* leni 0.5)))
- (setq ptii (polar pti (* pi 1.5) (* (+ 0.5 ii) h)));文字位置
- (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)));写出文字
- (setq ii (1+ ii))
- );repeat2
- (setq i (1+ i))
- );repeat1
- )
- ;==============程序开始===================
- (defun C:TT()
- (setq LST '(
- ("项目" "列1" "列2" "列3" "列4" "列5" "列6" "列7")
- ("行1" 1 12 123 1234 12345 123456 1234567 12345678 123456780 1234567890)
- ("行2" 1 12 123 1234 12345 123456 1234567 12345678 123456789)
- ("行3" "后面空" "" "前面空" "1234" "文本" "ABCDE")
- )
- )
- (setq pt (getpoint "\n指定表格左上角"))
- (setq zg 1)
- (LST2TAB pt LST zg)
- )
|