1291500406 发表于 2020-8-7 09:26:57

LISP调用VBA函数方法举例

本帖最后由 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"))




(bb_StrConv "石必强AutoLisp" 1)——> "石必强AUTOLISP"
(bb_StrConv "石必强AutoLisp" 2)——> "石必强autolisp"
(bb_StrConv "石必强AutoLisp" 4) ——>"石必强AutoLisp"
(bb_StrConv "石必强AutoLisp" 8)——>"石必强AutoLisp"
(bb_StrConv "石必强AutoLisp" 1) ——> "石必强AUTOLISP"
(bb_StrConv "石必强AutoLisp" 2) ——>"石必强autolisp"
(bb_StrConv "石必强AutoLisp" 4) ——>"石必强AutoLisp"
(bb_StrConv "石必强AutoLisp" 8) ——>"石必强AutoLisp"
(defun bb_StrConv (str b)(vla-eval (vlax-get-acad-object)(strcat "ThisDrawing.setVariable \"USERS1\",StrConv (\"" str"\", " (rtos b) ")"))(getvar "users1"))

(defun inputbox (promptstr title default)(vla-eval (vlax-get-acad-object)(strcat "ThisDrawing.setVariable \"USERS1\",inputBox (\"" promptstr "\", \""title"\", \""default"\")"))(getvar "users1"))

(defun msgbox (promptstr buttons title)(vla-eval (vlax-get-acad-object)(strcat "ThisDrawing.setVariable \"USERS1\",MsgBox (\""promptstr"\", "buttons ", \"" title"\")"))(getvar "USERS1"))



(vbafunctions"MsgBox (\"必强\",\"64\",\"标题\")")去掉string左右两端空白
(vbafunctions"Trim(\"   123454      \")")   ->"123454"
去掉string左端空白
(vbafunctions"Ltrim(\"   123454      \")")->"123454      "
去掉string右端空白
(vbafunctions"Rtrim(\"   123454      \")")-> "   123454"取string左段x个字符组成的字符串
(vbafunctions"Left(\"我爱中国\",2)") -> "我爱"取string右段x个字符组成的字符串
(vbafunctions"Right(\"我爱中国\",2)") -> "中国"取string从start位开始的x个字符组成的字符串
(vbafunctions"Mid(\"我爱中国\",2,3)") -> "爱中国"转换为大写
(vbafunctions"Ucase(\"I Love You\")")-> "I LOVE YOU"转换为小写
(vbafunctions"Lcase(\"I Love You\")")-> "i love you"返回x个空白的字符串
(vbafunctions"Space(5)") -> "   "返回 string,其中包含有与指定的字符代码相关的字符
(vbafunctions"Chr(65)") -> "A"
(defun vbafunctions (vbafun)(vla-eval (vlax-get-acad-object)(strcat "ThisDrawing.setVariable \"USERS1\","vbafun))(getvar "USERS1"))

tryhi 发表于 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"))

简简单单的一句,其功能就强大到如此,太强了

baitang36 发表于 2020-8-10 08:10:19

(defun bb_Format (a b)
(vla-eval (vlax-get-acad-object)
            (strcat "ThisDrawing.setVariable \"USERS1\",Format (\""
                  (vl-princ-to-string a)
                  "\", \""
                  b
                  "\")"
            )
)
(getvar "users1")
)

菜卷鱼 发表于 2020-8-7 10:14:35

小强牛逼

xvjiex 发表于 2020-8-7 11:11:03

扩展了lisp的功能,感谢!

ynhh 发表于 2020-8-7 12:31:13

大师

baitang36 发表于 2020-8-7 12:51:47

很厉害,程序呢?

xvjiex 发表于 2020-8-7 13:45:53

错误: Automation 错误。 加载 VBA 时出现问题。有什么办法?

自贡黄明儒 发表于 2020-8-7 13:52:08

除了Format,还有哪些可用?

xvjiex 发表于 2020-8-7 16:40:28

自贡黄明儒 发表于 2020-8-7 13:52
除了Format,还有哪些可用?

肯定还有很多,VBA的功能太多了,必强辛苦了!

叮咚 发表于 2020-8-7 16:56:59

页: [1] 2 3
查看完整版本: LISP调用VBA函数方法举例