天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 65|回复: 0

Lisp操作excel自动填充

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
Lisp操作excel自动填充


(defun $excel-zi-dong-tian-chong$ (xlapp     sh-n      rang-start rows
                   c-cz         XlAutoFillType
                   lst         /           co
                   nums         rang-end  row
                   rows         strs      xlsheet
                  )
                    ;自动填充
                    ;xlapp             excel的对象
                    ;sh-n              sheet的表名字
                    ;rang-start        起始单元格,字串格式
                                        ;rows               函数,如果传入了这个,就不用传入c-cz的值了,这个变量优先
                    ;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 rows) 'str)(= (type (read rows)) 'int)) ;传入进来的就是int格式
     t
    )
    ((and rows (= (type 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
    )
  )                    ;执行填充
)

 

 

 

 

Lisp操作excel自动填充
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 10:33 , Processed in 0.136620 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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