马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
- (defun $excel-zi-dong-tian-chong$ (xlapp sh-n rang-start
- c-cz XlAutoFillType
- lst / co
- nums rang-end row
- rows strs xlsheet
- )
- ;自动填充
- ;xlapp excel的对象
- ;sh-n sheet的表名字
- ;rang-start 起始单元格,字串格式
- ;c-cz 参照列,用来计算最大行的行号
- ;XlAutoFillType 填充模式
- ;lst 预留参数
- ;($excel-zi-dong-tian-chong$ nil "Sheet1" "C1" "A65536" 6 NIL)
- (or XlAutoFillType (setq XlAutoFillType 6))
- (or c-cz (setq c-cz "A65536")) ;参照列,用来计算最下面哪一行的行号
- (or xlapp (setq xlapp ($xlapp-New$ NIL nil nil))) ;EXCEL对象
- (setq xlsheet
- (vl-catch-all-apply
- 'vlax-get-property
- (list (vl-catch-all-apply
- 'vlax-get-property
- (list (vl-catch-all-apply
- 'vlax-get-property
- (list xlapp 'activeworkbook)
- )
- 'Sheets
- )
- )
- 'Item
- sh-n
- )
- )
- ) ;根据传入进来的表名字获取表对象
- (cond ((and rows (= (type rows) 'str) (= (type (read rows)) 'int))
- ;传入进来是字串格式,同时read后是int格式
- t
- )
- ((and rows (= (type (read rows)) 'int)) ;传入进来的就是int格式
- (setq rows (vl-princ-to-string rows)) ;转换为字串格式
- )
- (t
- (setq rows (vl-princ-to-string
- (vlax-get-property
- (vlax-get-property
- (msxlp-get-range xlsheet c-cz)
- 'End
- 3
- )
- 'Row
- )
- )
- ) ;自动根据参照列计算最大行的行号
- )
- ) ;填充的最大行数
- (setq nums nil)
- (setq strs (MAPCAR 'vl-list->string
- (mapcar 'list (vl-string->list rang-start))
- )
- ) ;转为字串表
- (setq strs (reverse strs)) ;倒置
- (while (and strs (= (type (read (car strs))) 'int))
- (setq nums (cons (car strs) nums)) ;找到数字,其实就是起始行号
- (setq strs (cdr strs))
- )
- (setq co (apply 'strcat (reverse strs))) ;得到起始列号
- (setq row (apply 'strcat (reverse nums))) ;得到起始行号
- (and rang-start
- co
- rows
- (setq rang-end (strcat rang-start ":" co rows))
- ) ;计算填充的最大行号
- (vl-catch-all-apply
- 'vlax-invoke-method
- (LIST (vl-catch-all-apply
- 'msxlp-get-range
- (list xlsheet rang-start)
- )
- 'AutoFill
- (vl-catch-all-apply
- 'msxlp-get-range
- (list xlsheet rang-end)
- )
- XlAutoFillType
- )
- ) ;执行填充
- )
|