明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 862|回复: 5

[提问] 如何给表格指定一个整定的精度位数?

[复制链接]
发表于 2023-8-8 08:34:15 | 显示全部楼层 |阅读模式
前天,提了一个问题是,如何给表格的其中一个单元格指定精度位数。在热心朋友的帮助下,已经解决了。就是用
(vla-SetCellFormat tabela 4 0 "%lu2%pr1")
但是如何给表格指定一个整定的精度位数?我多次尝试都失败了。
(vla-SetFormat tabela (+ acDataRow acHeaderRow acTitleRow) "%lu2%pr2");给整个表格整体指定精度位数为2
或者是
(vla-SetFormat tabela acTitleRow "%lu2%pr2")
(vla-SetFormat tabela (+ acDataRow acHeaderRow) "%lu2%pr2")
都失败了。
这个是table对象的一些方法和属性。我用的CAD2024
https://help.autodesk.com/view/A ... E-9729-F5E15341BAF5
 楼主| 发表于 2023-8-8 08:39:41 | 显示全部楼层
这是我的测试文件。不成功

  1. (defun AddTable (Title datalst RowH / TableList-C2R datalst colms maxrow wlst  row colm i rown coln)
  2.   (defun TableList-C2R (lst n / l lst)
  3.     (setq l nil)
  4.     (repeat n
  5.       (setq l (cons (mapcar
  6.                       'car
  7.                       lst
  8.                     ) l
  9.               )
  10.                                 lst (mapcar
  11.                                                         'cdr
  12.                                                         lst
  13.                                                 )
  14.       )
  15.     )
  16.     (reverse l)
  17.   )
  18.        
  19.   (setq datalst (mapcar
  20.                   '(lambda (y)
  21.                      (mapcar
  22.                        'vl-princ-to-string
  23.                        y
  24.                      )
  25.                    )
  26.                   datalst
  27.                 )
  28.                 colms (length datalst)
  29.                 maxrow (apply
  30.                                                  'max
  31.                                                  (mapcar
  32.                                                          'length
  33.                                                          datalst
  34.                                                  )
  35.                                          )
  36.                 wlst (mapcar
  37.                                          '(lambda (x)
  38.                                                         (apply
  39.                                                                 'max
  40.                                                                 (mapcar
  41.                                                                         '(lambda (y)
  42.                                                                                  (if y
  43.                                                                                          (strlen y)
  44.                                                                                          0
  45.                                                                                  )
  46.                                                                          )
  47.                                                                         x
  48.                                                                 )
  49.                                                         )
  50.                                                 )
  51.                                          (TableList-C2R datalst maxrow)
  52.                                  )
  53.                
  54.                 tabela (vla-addTable (vla-get-ModelSpace
  55.                                                                                                          (vla-get-ActiveDocument
  56.                                                                                                                  (vlax-get-acad-object)
  57.                                                                                                          )
  58.                                                                                                  ) (vlax-3d-point (getpoint "\n在屏幕上指定插入点创建表格."));
  59.                                                  (1+ colms) maxrow RowH (* RowH 50)
  60.                                          )
  61.                
  62.   )
  63.        
  64.        
  65.        
  66.        
  67.   (vla-put-regenerateTableSuppressed tabela :vlax-true)
  68.   (setq i -1)
  69.   (foreach w wlst
  70.     (vla-setcolumnwidth tabela (setq i (1+ i))
  71.                         1700
  72.     )
  73.   )
  74.        
  75.        
  76.   (vla-SetTextHeight tabela acTitleRow (* 0.75 RowH))
  77.   (vla-SetTextHeight tabela (+ acDataRow acHeaderRow) (* 0.5 RowH))
  78.   (vla-setalignment tabela acDataRow acMiddleCenter)
  79.        
  80.        
  81.        
  82.        
  83.   (vla-setText tabela 0 0 Title)
  84.   
  85.         (setq row 0)
  86.   (foreach data datalst
  87.     (setq row (1+ row)
  88.                         colm -1
  89.     )
  90.     (foreach str data
  91.       (vla-setText tabela row (setq colm (1+ colm)) str)
  92.     )
  93.                
  94.   )
  95.        

  96.         (vla-SetFormat tabela (+ acDataRow acHeaderRow acTitleRow) "%lu2%pr2");给整个表格整体指定精度位数为2
  97.   (vla-put-regenerateTableSuppressed tabela :vlax-false)
  98.        
  99.   (princ)
  100. )



  101. (defun c:fff()
  102.         (vl-load-com)
  103.         (AddTable "TITLE" '( ("Pe(kW)" "6.0012")
  104.                                                                                          ("Kd" "1.0012")
  105.                                                                                          ("cosφ" "0.8012")
  106.                                                                                          ("Pc(kW)" "=B3*B2")
  107.                                                                                          ("Ic(A)" "=B5/1.732/0.38/B4")
  108.                                                                                  ) 600
  109.         )
  110. )
发表于 2023-8-8 10:36:15 | 显示全部楼层
SetFormat是处理所有同类单元格,要求所有单元格的数据类型都一致,否则,就要一个个单元格设置。你的数据里面明显大把的字符串,怎么可能设置精度?
 楼主| 发表于 2023-8-8 14:56:26 | 显示全部楼层
我又改了下,这次输入的有数字的,不全是字符串。我现在想指定数字单元格的格式也指定不了。没有效果不知道什么原因。

  1. (vl-load-com)
  2. (defun AddTable (Title datalst RowH / TableList-C2R datalst colms maxrow wlst tabela row colm i rown coln  ins hgt app spc col)
  3.   (setq
  4.                 colms (length datalst)
  5.                 maxrow (apply
  6.                                                  'max
  7.                                                  (mapcar
  8.                                                          'length
  9.                                                          datalst
  10.                                                  )
  11.                                          )
  12.                
  13.                
  14.                 tabela (vla-addTable (vla-get-ModelSpace
  15.                                                                                                          (vla-get-ActiveDocument
  16.                                                                                                                  (vlax-get-acad-object)
  17.                                                                                                          )
  18.                                                                                                  ) (vlax-3d-point (getpoint "\n在屏幕上指定插入点创建表格."))
  19.                                                  (1+ colms) maxrow RowH (* RowH 50)
  20.                                          )
  21.                
  22.   )
  23.        
  24.        
  25.   (vla-put-regenerateTableSuppressed tabela :vlax-true)
  26.   (setq i -1)
  27.   (while (< i 1)
  28.     (vla-setcolumnwidth tabela (setq i (1+ i))
  29.                         1700
  30.     )
  31.   )
  32.        
  33.         (vla-SetTextStyle tabela (+ acDataRow acHeaderRow acTitleRow) "_TEL_DIM")
  34.        
  35.        
  36.   (vla-SetTextHeight tabela acTitleRow (* 0.75 RowH))
  37.   (vla-SetTextHeight tabela (+ acDataRow acHeaderRow) (* 0.5 RowH))
  38.   (vla-setalignment tabela acDataRow acMiddleCenter)
  39.        
  40.   (vla-setText tabela 0 0 Title)
  41.   
  42.        
  43.         (setq row 0)
  44.   (foreach data datalst
  45.     (setq row (1+ row)
  46.                         colm -1
  47.     )
  48.     (foreach str data
  49.       (vla-setText tabela row (setq colm (1+ colm)) str)
  50.     )
  51.                
  52.   )
  53.        
  54.         (setq ins (getvar 'viewctr)
  55.                 hgt (getvar 'textsize)
  56.                 app (vlax-get-acad-object)
  57.                 spc (vlax-get-property (vla-get-activedocument app) (if (= 1 (getvar 'cvport)) 'paperspace 'modelspace))
  58.                 col (vla-getinterfaceobject app (strcat "autocad.accmcolor." (substr (getvar 'acadver) 1 2))))
  59.         (vla-setrgb  col    255 0 0)
  60.         (vla-SetCellContentColor tabela 5 1 col)

  61.         (vla-SetCellFormat tabela 2 1 "%lu2%pr2")
  62.         (vla-SetCellFormat tabela 3 1 "%lu2%pr2")
  63.         (vla-SetCellFormat tabela 4 1 "%lu2%pr2")
  64.         (vla-DeleteRows tabela 0 1)
  65.   (vla-put-regenerateTableSuppressed tabela :vlax-false)
  66.   (princ)
  67. )



  68. (defun c:fff()
  69.         (vl-load-com)
  70.         (AddTable "TITLE" '( ("Pe(kW)" 6.00)
  71.                                                                                          ("Kd" 1.00)
  72.                                                                                          ("cosφ" 0.80)
  73.                                                                                          ("Pc(kW)" "=B3*B2")
  74.                                                                                          ("Ic(A)" "=B5/1.732/0.38/B4")
  75.                                                                                  ) 600
  76.         )
  77.        
  78. )
 楼主| 发表于 2023-8-8 14:59:25 | 显示全部楼层
kozmosovia 发表于 2023-8-8 10:36
SetFormat是处理所有同类单元格,要求所有单元格的数据类型都一致,否则,就要一个个单元格设置。你的数据 ...

大神,你看看我四楼的代码,我又改了下,这次输入的有数字了。我现在不弄整个单元格的精度了。因为里面有字符串。我现在想指定数字单元格的精度。也是指定不了。目前只能指定公式单元格的精度。不知道是什么原因。难道是用了settext这个函数的原因吗?自动将数字转换成字符串了?

请问,如何将数字直接写入单元格啊。或者再退一步,怎么将某个单元格里的数值字符串转成数字格式?
发表于 2023-8-8 22:17:18 | 显示全部楼层
cfc 发表于 2023-8-8 14:59
大神,你看看我四楼的代码,我又改了下,这次输入的有数字了。我现在不弄整个单元格的精度了。因为里面有 ...

(setq b (cond ((or (= (type b) 'REAL) (= (type b) 'INT)) (rtos b 2 pre))
              ((and (= (type b) 'STR) (distof b)) (rtos (distof b) pre))
              (t b)
        )
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 00:48 , Processed in 0.181157 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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