天气与日历 切换到窄版

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

Lisp向excel指定单元格插入图片

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
Lisp向excel指定单元格插入图片



(defun $excel-cha-ru-tu-pian$ (xlapp    sh-n     ID      path
                   xlapprelease?     LST      /
                   H    H1     L      Mergerange
                   P    Pic     Picname  sc
                   ShapeRange     W      W1
                   xlrange    xlsheet
                  )
                    ;插入图片
                    ;xlapp excel对象
                    ;sh-n sheet表名
                    ;id 单元格
                    ;path 图片路径
                    ;xlapprelease? 程序结束后是否需要释放excel?
                    ;lst 预留参数
  (OR ID (setq id "A1"))
  (or xlapp (setq xlapp ($xlapp-New$ NIL nil nil)))
  (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
       )
     )
  )
  (setq    Pic
     (vl-catch-all-apply
       'vlax-invoke-method
       (list
         (vl-catch-all-apply
           'vlax-invoke-method
           (list xlsheet 'Pictures)
         )
         'Insert
         path
       )
     )
  )
  (setq    Picname
     (vl-catch-all-apply
       'vlax-get-property
       (list Pic 'Name)
     )
  )
  (setq W1 (vl-catch-all-apply 'vlax-get-property (list Pic 'Width)))
  (setq H1 (vl-catch-all-apply 'vlax-get-property (list Pic 'Height)))
  (setq    xlrange
     (vl-catch-all-apply
       'vlax-get-property
       (list
         (vl-catch-all-apply
           'vlax-get
           (list (vl-catch-all-apply
               'vlax-get-property
               (list xlapp "ActiveWorkbook")
             )
             'ActiveSheet
           )
         )
         'range
         id
       )
     )
  )
  (setq
    L (vl-catch-all-apply
    'vlax-variant-value
    (LIST
      (vl-catch-all-apply 'vlax-get-property (LIST xlrange 'Left))
    )
      )
  )
  (SETQ
    P (vl-catch-all-apply
    'vlax-variant-value
    (LIST
      (vl-catch-all-apply 'vlax-get-property (LIST xlrange 'Top))
    )
      )
  )
  (SETQ    W (vl-catch-all-apply
        'vlax-variant-value
        (LIST (vl-catch-all-apply
            'vlax-get-property
            (LIST xlrange 'Width)
          )
        )
      )
  )
  (SETQ    H (vl-catch-all-apply
        'vlax-variant-value
        (LIST (vl-catch-all-apply
            'vlax-get-property
            (LIST xlrange 'Height)
          )
        )
      )
  )
  (vl-catch-all-apply 'vlax-put-property (LIST Pic 'Left L))
  (vl-catch-all-apply 'vlax-put-property (LIST Pic 'Top P))
  (setq    ShapeRange
     (vl-catch-all-apply
       'vlax-get-property
       (LIST
         (vl-catch-all-apply
           'vlax-get-property
           (LIST xlsheet 'Shapes)
         )
         'Range
         Picname
       )
     )
  )
  (vl-catch-all-apply
    'vlax-put-property
    (LIST
      ShapeRange
      'LockAspectRatio
      :vlax-true
    )
  )
  (if (AND W
       (NOT (VL-CATCH-ALL-ERROR-P W))
       W1
       (NOT (VL-CATCH-ALL-ERROR-P W1))
       H1
       (NOT (VL-CATCH-ALL-ERROR-P H1))
       H
       (NOT (VL-CATCH-ALL-ERROR-P H))
      )
    (if    (>= (/ W H) (/ W1 H1))
      (progn
    (SETQ SC (/ (- W (* (/ W1 H1) H)) 2))
    (vl-catch-all-apply
      'vlax-put-property
      (LIST ShapeRange 'Height H)
    )
    (vl-catch-all-apply
      'vlax-invoke-method
      (LIST ShapeRange 'IncrementLeft SC)
    )
      )
      (progn
    (SETQ SC (/ (- H (* (/ H1 W1) W)) 2))
    (vl-catch-all-apply
      'vlax-put-property
      (LIST ShapeRange 'Width W)
    )
    (vl-catch-all-apply
      'vlax-invoke-method
      (list ShapeRange 'IncrementTop SC)
    )
      )
    )
  )
  (vl-catch-all-apply
    'vlax-put-property
    (LIST Pic
      'Placement
      (vl-catch-all-apply 'vlax-make-variant (LIST 1 2))
    )
  )
  (if xlapprelease?            ;释放吗?
    (progn (vl-catch-all-apply 'vlax-release-object (list xlapp))
       (setq xlapp nil)
    )
  )
  (princ)
)

 

 

 

 

Lisp向excel指定单元格插入图片
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-1 10:36 , Processed in 0.156895 second(s), 28 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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