本帖最后由 wgij007 于 2020-12-24 08:20 编辑
;;;表快速输出 XLS
;lst表一行一子表,一格一元素
;(ls2xls (list (list "x" "y" 3)(list 1 "" 3)))
(defun ls2xls (lst / Excel:i2ColNo lens maxl x excel bks acBook sht rc cells range)
(defun Excel:i2ColNo (a / l _i2ColNo)
(defun _i2ColNo (num / lst)
(cond((<= 1 num 26)(setq lst(cons num lst)))
((> num 26)(setq lst(append(_i2ColNo (/ num 26))(list(rem num 26)))))
(t lst)
) lst
)
(if (and(>= (setq a(fix(abs a)))1)(setq l(_i2ColNo a)))
(apply 'strcat(mapcar '(lambda (x)(chr(+ 64 x)))l))
)
);整数转EXCEL的列编号
(setq lens(mapcar 'length lst))
(setq maxl(apply 'max lens))
(if (not(apply '= lens))
(setq lst(mapcar '(lambda(x)
(repeat(- maxl(length x))(setq x(append x(list "")))) x)lst)
);子表不等长的用""补齐
)
(setq excel (vlax-get-or-create-object "Excel.Application"))
(vla-put-visible excel :vlax-true)
(setq lens(length lst));行数
(setq bks (vlax-get excel 'workbooks))
(setq acBook(vlax-invoke bks 'Add))
(setq sht (vlax-get excel 'ActiveSheet))
(setq rc (strcat "A1:"(excel:i2ColNo maxl)(itoa lens)));写表范围
(setq cells(vlax-get sht 'cells))
(setq range(vlax-get-property cells 'Range rc))
(vlax-put-property range 'value2
(vlax-safearray-fill
(vlax-make-safearray vlax-vbstring
(cons 1 lens)(cons 1(length (car lst)))
)lst
)
)
;(vlax-put-property (vlax-get-property sht "Range" "A:A") "ColumnWidth" 20);列宽20
;(vlax-put-property (vlax-get-property sht "Range" "1:1") "RowHeight" 30);行高30
)
把Excel.Application 改为 ket.Application 也不行
网友答: 首先改成ket.Application,然后看看有什么错误提示,然后再根据错误提示修改代码。网友答: 楼上是高人网友答: 我也很需要这个,静等高人网友答:
问题找到了,装一个数据库就可了网友答: 本帖最后由 scnc001 于 2025-9-30 07:42 编辑
装的是什么数据库,程序还用改吗网友答: 用第三方库多方便网友答: 第三方库是什么软件库?网友答: 我下了这个就可以了
vba_for_wps_2052
;;;表快速输出 XLS
;lst表一行一子表,一格一元素
;(ls2xls (list (list "x" "y" 3)(list 1 "" 3)))
(defun ls2xls (lst / Excel:i2ColNo lens maxl x excel bks acBook sht rc cells range)
(defun Excel:i2ColNo (a / l _i2ColNo)
(defun _i2ColNo (num / lst)
(cond((<= 1 num 26)(setq lst(cons num lst)))
((> num 26)(setq lst(append(_i2ColNo (/ num 26))(list(rem num 26)))))
(t lst)
) lst
)
(if (and(>= (setq a(fix(abs a)))1)(setq l(_i2ColNo a)))
(apply 'strcat(mapcar '(lambda (x)(chr(+ 64 x)))l))
)
);整数转EXCEL的列编号
(setq lens(mapcar 'length lst))
(setq maxl(apply 'max lens))
(if (not(apply '= lens))
(setq lst(mapcar '(lambda(x)
(repeat(- maxl(length x))(setq x(append x(list "")))) x)lst)
);子表不等长的用""补齐
)
(setq excel (vlax-get-or-create-object "Excel.Application"))
(vla-put-visible excel :vlax-true)
(setq lens(length lst));行数
(setq bks (vlax-get excel 'workbooks))
(setq acBook(vlax-invoke bks 'Add))
(setq sht (vlax-get excel 'ActiveSheet))
(setq rc (strcat "A1:"(excel:i2ColNo maxl)(itoa lens)));写表范围
(setq cells(vlax-get sht 'cells))
(setq range(vlax-get-property cells 'Range rc))
(vlax-put-property range 'value2
(vlax-safearray-fill
(vlax-make-safearray vlax-vbstring
(cons 1 lens)(cons 1(length (car lst)))
)lst
)
)
;(vlax-put-property (vlax-get-property sht "Range" "A:A") "ColumnWidth" 20);列宽20
;(vlax-put-property (vlax-get-property sht "Range" "1:1") "RowHeight" 30);行高30
)
把Excel.Application 改为 ket.Application 也不行
网友答: 首先改成ket.Application,然后看看有什么错误提示,然后再根据错误提示修改代码。网友答: 楼上是高人网友答: 我也很需要这个,静等高人网友答:
LIULISHENG 发表于 2021-9-18 23:03
我也很需要这个,静等高人
问题找到了,装一个数据库就可了网友答: 本帖最后由 scnc001 于 2025-9-30 07:42 编辑
wgij007 发表于 2021-9-19 16:45
问题找到了,装一个数据库就可了
装的是什么数据库,程序还用改吗网友答: 用第三方库多方便网友答: 第三方库是什么软件库?网友答: 我下了这个就可以了
vba_for_wps_2052