明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4619|回复: 20

[函数] LISP调用VBA函数方法举例

  [复制链接]
发表于 2020-8-7 09:26:57 | 显示全部楼层 |阅读模式
本帖最后由 1291500406 于 2020-8-19 09:09 编辑

Format(值,格式(可选参数))
一、数字格式:
1、General Number:普通数字,可以用来去掉千位分隔号和无效 0 。
(bb_Format "1,234,567.80" "General Number")->"1234567.8"
2、Currency:货币类型,可添加千位分隔号和货币符号,保留两位小数点。
(bb_Format 1234567 "Currency")  -> "¥1,234,567.00"
3、Fixed:格式为带两位小数的数字。
(bb_Format "123456" "Fixed")  -> "123456.00"
4、Standard:标准,即带千位分隔号和两位小数。
(bb_Format "123456" "Standard")  -> "123,456.00"
5、Percent:带两位小数点的百分数。
(bb_Format "123456" "Percent")  -> "12345600.00%"
6、Scientific:科学记数法。
(bb_Format "1234567" "Scientific")  -> "1.23E+06"

7、Yes/No:当数值为非 0 数字时返回 Yes ,否则返回 No 。
(bb_Format -3.14 "Yes/No")   -> "Yes"
(bb_Format 0 "Yes/No")       ->       "No"
(bb_Format -.14 "Yes/No")   -> "#<SUBR @113ef598 ->"
8、True/False:当数值为非 0 数字时返回 True ,否则返回 False 。
(bb_Format -3.14 "True/False")        "True"
(bb_Format 0 "True/False")           "False"
9、On/Off:当数值为非 0 数字时返回 On ,否则返回 Off 。
(bb_Format -3.14 "On/Off")        "On"
(bb_Format 0 "On/Off")           "Off"
10、""或省略:返回原值,但去除了小数点前后的无效 0 。
(bb_Format "0.1030" "")  ->   "0.103"
11、0:占位格式化,不足位时补足 0 。
(bb_Format 12.3 "0.00")  ->"12.30"
12、#:占位格式化,不足位时不补足 0 。
(bb_Format 123 "####")  -> "123"
13、%:转化为百分数,一个%代表乘以 100 。
(bb_Format 1.23 "0.00%")  -> "123.00%"
(bb_Format 1.23  "0.00%%")  ->"12300.00%%"

14、\:强制显示某字符。
(bb_Format 12.34 "\\R\\M\\B .00")  ->  "RMB 12.34"
15、;(分号):分段显示不同格式
(bb_Format 123 "正;负;零")  ->  "正"
(bb_Format -123 "正;负;零")  ->     "负"
(bb_Format 0 "正;负;零")   ->    "零"

二、日期和时间格式:
1、固定格式参数
General Date:基本类型
(bb_Format "2010-5-1 9:8:5" "General Date")   ->   "2010/5/1 9:08:05"
Long Date:操作系统定义的长日期
(bb_Format "2010-5-1 9:8:5" "Long Date")   ->   "2010年5月1日"
Medium Date:中日期
(bb_Format "2010-5-1 9:8:5" "Medium Date")   ->   "10-05-01"
Short Date:操作系统定义的短日期
(bb_Format "2010-5-1 9:8:5""Short Date")   -> "2010/5/1"
Long Time:操作系统定义的长时间
(bb_Format "2010-5-1 9:8:5""Long Time")   -> "9:08:05"
Medium Time:带AM/PM(上午/下午)的12小时制,不带秒
(bb_Format "2010-5-1 9:8:5""Medium Time")    ->   "09:08 上午"
Short Time:24时制的时间,不带秒
(bb_Format "2010-5-1 9:8:5" "Short Time")    ->  "09:08"
2、自定义格式
C:格式化为国标的日期和时间
(bb_Format "2010-5-1 9:8:5" "c") -> "2010/5/1 9:08:05"
y:一年中的第几天(1-366)
(bb_Format "2010-5-1 9:8:5" "y") ->  "121"
yy:两位数的年份(00-99)
(bb_Format "2010-5-1 9:8:5" "yy") -> "10"
yyy:上面的 yy 与 y 结合在一起
(bb_Format "2010-5-1 9:8:5" "yyy") -> "10121"
(bb_Format "2010-5-1 9:8:5" "yy年第y天")  ->  "10年第121天"
yyyy:四位数的年份(0100-9999)
(bb_Format "2010-5-1 9:8:5" "yyyy")  ->  "2010"
d:一个月中的第几天(1-31)
(bb_Format "2010-5-1 9:8:5" "d")  -> "1"
dd:与 d 相同,但不足两位时补足 0
(bb_Format "2010-5-1 9:8:5" "dd")  -> "01"
ddd:三个英文字母表示的星期几
(bb_Format "2010-5-1 9:8:5" "ddd")  -> "Sat"
dddd:英文表示的星期几
(bb_Format "2010-5-1 9:8:5" "dddd")  -> "Saturday"
ddddd:显示标准日期
(bb_Format "2010-5-1 9:8:5" "ddddd")  -> "2010/5/1"
dddddd:长日期
(bb_Format "2010-5-1 9:8:5" "dddddd")  -> "2010年5月1日"

w:一个星期中的第几天(始于周日,周日为1)
(bb_Format "2010-5-1 9:8:5" "w")  -> "7"

ww:一年中的第几周
(bb_Format "2010-5-1 9:8:5" "ww")  -> "18"
m:月份数(当用于时间时,也可以表时为分钟)
(bb_Format "2010-5-1 9:8:5" "m") -> "5"
mm:当小于10时带前导0的月数(当用于时间时,也可以表示为两位数的分钟数)
(bb_Format "2010-5-1 9:8:5" "mm") -> "05"
mmm:三个英文字母表示的月份数
(bb_Format "2010-5-1 9:8:5" "mmm") ->"Jan"
mmmm:英文表示的月份数
(bb_Format "2010-5-1 9:8:5" "mmmm")->"January"
q:一年中的第几季(1-4)
(bb_Format "2010-5-1 9:8:5" "q") -> "2"
aaa:中文表示的周几
(bb_Format "2010-5-1 9:8:5" "aaa") -> "周六"
aaaa:中文表示的星期几
(bb_Format "2010-5-1 9:8:5" "aaaa")-> "星期六"
h:小时数(0-23)
(bb_Format "2010-5-1 9:8:5" "h" )  ->   "9"
h:两位数表示的小时数
(bb_Format "2010-5-1 9:8:5" "hh" )  ->   "09"
n:分钟数(0-59)
(bb_Format "2010-5-1 9:8:5" "n" )  ->"8"
nn:两位数表示的分钟数(00-59)
(bb_Format "2010-5-1 9:8:5" "nn" )  -> "08"
s:秒数(0-59)
(bb_Format "2010-5-1 9:8:5" "s" )  -> "5"
ss:两位数表示的秒数(00-59)
(bb_Format "2010-5-1 9:8:5" "ss" ) -> "05"
ttttt:标准时间,当小时数小于10时不带0,与 h:mm:ss 或 h:nn:ss 相同
(bb_Format "2010-5-1 9:8:5" "ttttt" ) -> 9:08:05
AM/PM:显示当前为AM或PM
(bb_Format "2010-5-1 9:8:5""AM/PM")   -> "AM"
(bb_Format "2010-5-1 12:0:0""AM/PM")   -> "PM"

A/P:显示当前为A或P
(bb_Format "2010-5-1 9:8:5""A/P")   -> "A"
(bb_Format "2010-5-1 12:0:0""A/P")   -> "P"

说明:可以多种格式联合使用,如:
(bb_Format "2010-5-1 9:8:5""dddddd aaaa") -> "2010年5月1日 星期六"


三、文本格式
@:匹配位置插入格式化文本,如:
(bb_Format "abcde" "X@") -> Xabcde

在"abcde"第1位字符后面插入文本"X"
(bb_Format "abcde" "@X") -> "aXbcde"

在"abcde"第2位字符后面插入文本"X"
(bb_Format "abcde" "@@X") -> "abXcde"

在"abcde"第3位字符后面插入文本"X"
(bb_Format "abcde" "@@@X")  -> "abcXde"

当点位符@比原文本字符串多时,刚在相应位置上添加空格,如:
(bb_Format "abc" "X@@@@")-> "X abc"
(bb_Format "t" "@@a@")   ->  "  at"

与!配合可从后面截取一段文本,如:
截取"abcde"后面1个字符文本

(bb_Format "abcde" "!@")   ->  "e"
截取"abcde"后面2个字符文本
(bb_Format "abcde" "!@@")   ->  "de"

截取"abcde"后面3个字符文本
(bb_Format "abcde" "!@@@")   ->  "cde"

截取"abcde"后面两位,并在前面添加"XY"
(bb_Format "abcde" "!XY@@")   ->  "XYde"

&:字符占位符,与@基本相同
<:强制将所有字符以小写格式显示。
(bb_Format "I Love You"  "<")  -> "i love you"

>:强制将所有字符以大写格式显示。
(bb_Format "I Love You"  ">")  -> "I LOVE YOU"
(defun bb_Format  (a b)(vla-eval (vlax-get-acad-object)(strcat"ThisDrawing.setVariable \"USERS1\",Format (\""(vl-princ-to-string a)"\", \""b"\")"))(getvar "users1"))


评分

参与人数 6明经币 +6 收起 理由
USER2128 + 1 很给力!
tryhi + 1
ymcui + 1 很给力!
自贡黄明儒 + 1
xvjiex + 1 很给力!
菜卷鱼 + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2020-8-7 17:05:02 | 显示全部楼层
(defun bb_Format  (a b)(vla-eval (vlax-get-acad-object)(strcat"ThisDrawing.setVariable \"USERS1\",Format (\""(vl-princ-to-string a)"\", \""b"\")"))(getvar "users1"))

简简单单的一句,其功能就强大到如此,太强了
回复 支持 1 反对 0

使用道具 举报

发表于 2020-8-10 08:10:19 | 显示全部楼层
  1. (defun bb_Format (a b)
  2.   (vla-eval (vlax-get-acad-object)
  3.             (strcat "ThisDrawing.setVariable "USERS1",Format (""
  4.                     (vl-princ-to-string a)
  5.                     "", ""
  6.                     b
  7.                     "")"
  8.             )
  9.   )
  10.   (getvar "users1")
  11. )

发表于 2020-8-7 11:11:03 | 显示全部楼层
扩展了lisp的功能,感谢!
发表于 2020-8-7 12:51:47 | 显示全部楼层
很厉害,程序呢?
发表于 2020-8-7 13:45:53 | 显示全部楼层
错误: Automation 错误。 加载 VBA 时出现问题。有什么办法?
发表于 2020-8-7 13:52:08 | 显示全部楼层
除了Format,还有哪些可用?
发表于 2020-8-7 16:40:28 | 显示全部楼层
自贡黄明儒 发表于 2020-8-7 13:52
除了Format,还有哪些可用?

肯定还有很多,VBA的功能太多了,必强辛苦了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-6 00:22 , Processed in 0.231268 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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