找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4391|回复: 22

[表格] (XD::Table:Make)制作表格

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-3-10 17:30:22 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::Table:Make
调用格式: (XD::Table:Make lst pt RowHeight Height)
参数说明: lst --- 按行字串列表 ((str1 str2 ...) (str ...) ...)
pt --- 表格插入点
RowHeight ---- 行高
Height ---- 字高
返回值:
函数简介: 制作 Net 表格
函数来源: 原创
函数作者: st788796
适用版本: XDRX API 
最后更新时间: 2014-11-12
备注: 字高不要大于行高的一半
lst 第一个元素可以是设定的列宽表, 没有的时候按字符宽度适应
演示图片: -

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
本帖最后由 st788796 于 2014-11-12 10:47 编辑

  1. ;|
  2. 函数名称:XD::Table:Make  
  3. 调用格式:(XD::Table:Make lst pt RowHeight Height)  
  4. 参数说明:
  5. lst --- 按行字串列表 ((str1 str2 ...) (str ...) ...)
  6. pt --- 表格插入点
  7. RowHeight ---- 行高
  8. Height ---- 字高  
  9. 返回值:表  
  10. 备注:字高不要大于行高的一半
  11. lst 第一个元素可以是设定的列宽表, 没有的时候按字符宽度适应  
  12. |;
  13. ;;2014.11.12 修改
  14. ;;第一个元素为实数表时为设定的每列列宽,可选
  15. ;;第二个元素或第一个元素为 string 时作为表格标题
  16. (defun XD::Table:Make (lst         p           RowHeight height
  17.                        /         tf           tb             i
  18.                        _ColumnWidths           _widthL   _spa
  19.                        maxCol
  20.                       )
  21.   (defun _ColumnWidths (lst h mL / nl)
  22.     (setq nL (mapcar '(lambda (x)
  23.                         (XD::List:FillGap x " " mL)
  24.                       )
  25.                      lst
  26.              )
  27.     )
  28.     (mapcar '(lambda (x)
  29.                (XD::String:ActualMaxWidth x "" h 1.)
  30.              )
  31.             (apply 'mapcar (cons 'list nL))
  32.     )
  33.   )
  34.   (if (or (null height) (= height ""))
  35.     (setq height (* RowHeight 0.3))
  36.   )
  37.   ;;处理列宽
  38.   (if
  39.     (and
  40.       (listp (car lst))
  41.       (apply
  42.         'and
  43.         (mapcar        '(lambda (x) (or (eq (type x) 'REAL) (eq (type x) 'INT)))
  44.                 (car lst)
  45.         )
  46.       )
  47.     )
  48.      (progn
  49.        (setq _widthL (car lst)
  50.              maxCol  (apply 'max (mapcar 'length lst))
  51.        )
  52.        (if (eq (type (cadr lst)) 'STR)
  53.          (setq tile (cadr lst)
  54.                lst  (cddr lst)
  55.          )
  56.          (setq tile nil
  57.                lst  (cdr lst)
  58.          )
  59.        )
  60.      )
  61.      (progn
  62.        (if (eq (type (car lst)) 'STR)
  63.          (setq tile (car lst)
  64.                lst  (cdr lst)
  65.          )
  66.          (setq tile nil)
  67.        )
  68.        (setq maxCol  (apply 'max (mapcar 'length lst))
  69.              _WidthL (_ColumnWidths lst height maxCol)
  70.        )
  71.      )
  72.   )
  73.   (setq        tb   (xdrx_table_make
  74.                p
  75.                (1+ (length lst))
  76.                RowHeight
  77.                maxCol
  78.                10.
  79.              )
  80.         _spa (* 6 (xdrx_table_horzCellMargin tb))
  81.   )
  82.   (XD::Table:Begin tb)
  83.   (xdrx_table_SetTextHeight tb 1 3.0)
  84.   (xdrx_entity_scale
  85.     tb
  86.     p
  87.     (/ RowHeight (xdrx_table_rowheight tb 1))
  88.   )
  89.   (setq i -1)
  90.   (mapcar '(lambda (x)
  91.              (xdrx_table_setcolumnwidth tb (setq i (1+ i)) x)
  92.            )
  93.           (mapcar '(lambda (a) (+ _spa a)) _WidthL)
  94.   )
  95.   ;;(xdrx_table_setrowheight tb RowHeight)
  96.   (xdrx_table_settextheight tb 7 height)
  97.   (xdrx_table_setalignment tb 1 5)
  98.   (xdrx_table_SetGridVisibility tb 2 41 nil)
  99.   (setq i 0)
  100.   (mapcar
  101.     '(lambda (x / j)
  102.        (setq j -1
  103.              i (1+ i)
  104.        )
  105.        (mapcar '(lambda        (a)
  106.                   (xdrx_table_settextstring
  107.                     tb
  108.                     i
  109.                     (setq j (1+ j))
  110.                     (if        (eq (type a) 'STR)
  111.                       a
  112.                       (vl-princ-to-string a)
  113.                     ) ;_2014.11.12
  114.                   )
  115.                 )
  116.                x
  117.        )
  118.      )
  119.     lst
  120.   )
  121.   (if tile
  122.     (xdrx_table_settextstring tb 0 0 tile)
  123.   ) ;_2014.11.12
  124.   (XD::Table:End tb)
  125.   tb
  126. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-3-13 15:55:26 | 显示全部楼层
有一个问题,Table Cell 的文字为 Mtext,即使当前字体是西文字体,Cell 中同样可以输入中文,CAD会自动使用宋体(windows 7),这样求出的列宽度会小

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2014-3-13 20:26:01 来自手机 | 显示全部楼层
同一行而言,指定每列宽是不是更实用?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-3-13 20:36:14 | 显示全部楼层
按每列中最长字串定该列适合宽度

点评

比如明细表,国标每列宽度是定值,而且不同  详情 回复 发表于 2014-3-13 21:27
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2014-3-13 21:27:15 来自手机 | 显示全部楼层
Free-Lancer 发表于 2014-3-13 20:36
按每列中最长字串定该列适合宽度

比如明细表,国标每列宽度是定值,而且不同
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-3-13 21:50:22 来自手机 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2014-3-13 21:27
比如明细表,国标每列宽度是定值,而且不同

可以将lst首元素规定为列宽
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-3-22 20:25:40 | 显示全部楼层
2014.3.22更新
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8611个

财富等级: 富甲天下

发表于 2014-3-22 22:55:33 | 显示全部楼层
除表头外,有块的行对齐设置不起作用,就是这句(xdrx_table_setalignment tb 7 5)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8611个

财富等级: 富甲天下

发表于 2014-3-22 22:56:50 | 显示全部楼层
另外,字体如何设置为自己想要的样式?看了半天帮助,也不知道xdrx_table_SetTextStyle怎么用
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-3-22 23:29:20 | 显示全部楼层
liuyj 发表于 2014-3-22 22:56
另外,字体如何设置为自己想要的样式?看了半天帮助,也不知道xdrx_table_SetTextStyle怎么用

1 7 是全部区域设为正中对齐,对块有效
2 这个 Style 还是用 textstyle 系统变量设置,Cell 中用的是 Mtext,这个Mtext 有个自动适应,比如你设置了 EN,但仍可以写入 中文,不过会出现字体替代
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8611个

财富等级: 富甲天下

发表于 2014-3-22 23:46:16 | 显示全部楼层
应该是正中对齐,但我在cad2006及cad2010下得到的都是中上对齐
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-3-22 23:57:00 | 显示全部楼层
liuyj 发表于 2014-3-22 23:46
应该是正中对齐,但我在cad2006及cad2010下得到的都是中上对齐

功  能:
设定指定行或者具体行列的单元格的对齐方式
调用格式:
1.  (xdrx_table_setAlignment <表格实体名> <Row Type> <对齐方式>)

2.  (xdrx_table_setAlignment <表格实体名> <Row>  <Column> <对齐方式>)
返 回 值:
1-9
1  kTopLeft
2  kTopCenter
3  kTopRight
4  kMiddleLeft
5  kMiddleCenter
6  kMiddleRight
7  kBottomLeft
8  kBottomCenter
9  kBottomRight
说    明:
<Row Type>
1: kDataRow,
2: kTitleRow,
4: kHeaderRow
1+2+4=7 :所有行
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8611个

财富等级: 富甲天下

发表于 2014-3-23 00:11:42 | 显示全部楼层
没错,看帮助是应该这样写,可是我怎么弄也是下面这样.
BaiduShurufa_2014-3-23_0-11-37.png
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-3-23 00:22:28 | 显示全部楼层
这样试一试
(xdrx_table_setalignment (car (entsel)) 1 5)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8611个

财富等级: 富甲天下

发表于 2014-3-23 00:34:21 | 显示全部楼层
这样可以中心对齐了,不能建立表格的时候直接到位吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-3-29 15:04 , Processed in 0.218362 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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