Eltrion 发表于 2019-8-5 20:45:25

excel怎么以现有的页面为模板新增页面

在论坛看到一个vlsp操作excel的相关函数合集里面有操作页面的函数但好像没有我需要的这种就是比如现在有页面sheet1   里面做好了一些模板怎样以sheet1为模板新建一个页面sheet2
下面是函数合集里关于页面操作的函数


;0·获取xls文件的所有页面名称列表
;|
Examples:
(vlxls-sheet-get-all *xlapp*)==>( "Sheet1" "Sheet2" "Sheet3" )
|;
(defun vlxls-sheet-get-all (xlapp / SH Rtn)
   (vlax-for SH (vlax-get-property Xlapp "sheets" )
      (setq Rtn (cons (vlax-get-property sh "Name" ) Rtn))
   )
   (reverse Rtn)
)


;0·获取当前页面名称
;|
Examples:
(vlxls-sheet-get-active *xlapp*)==>"Sheet2"
|;
(defun vlxls-Sheet-Get-Active (xlapp)
   (vlax-get-property (msxl-get-ActiveSheet Xlapp) 'name)
)


;0·删除页面
;|
Examples:
(vlxls-sheet-delete *xlapp* "Sheet1")==>T
(vlxls-sheet-delete *xlapp* "UnExistingSheet")==>NIL
|;
(defun vlxls-sheet-delete (xlapp Name / sh Rtn)
   (setq Rtn (vlxls-sheet-get-all Xlapp))
   (vlax-for sh (vlax-get-property Xlapp "sheets" )
      (if (= (vlax-get-property sh "Name" ) Name)
         (vlax-invoke-method sh "Delete" )
      )
   )
   (not (equal Rtn (vlxls-sheet-get-all Xlapp)))
)


;0·更改页名称
;|
Examples:
(vlxls-sheet-rename "New" "Sheet1" *xlapp*)==>T
(vlxls-sheet-rename "New" NIL *xlapp*)==>T
(vlxls-sheet-rename "Sheet3" NIL *xlapp*)==>NIL
(vlxls-sheet-rename "Sheet2" "Sheet1" *xlapp*)==>NIL
(vlxls-sheet-rename "Sheet2" "UnExistSheet" *xlapp*)==>NIL
|;
(defun vlxls-sheet-rename (New Old Xlapp / sh Rtn)
   (if (null old)
      (setq old (msxl-get-name (msxl-get-activesheet Xlapp)))
   )
   (if (member New (vlxls-sheet-get-all Xlapp))
      (setq Rtn nil)
      (progn
         (vlax-for sh (vlax-get-property Xlapp "sheets" )
            (if (= (msxl-get-name sh) Old)
               (msxl-put-name sh New)
            )
         )
         (setq Rtn
            (equal New
               (vlax-get-property (msxl-get-ActiveSheet Xlapp) 'name)
            )
         )
      )
   )
   Rtn
)


;0·新增页
;|
Examples:
(vlxls-sheet-add *xlapp* "Sheet1")==>T
(vlxls-sheet-add *xlapp* NIL)==>T
(vlxls-sheet-add *xlapp* "NewSheet")==>NIL
|;
(defun vlxls-sheet-add (xlapp Name / Rtn)
   (if (member name (vlxls-sheet-get-all xlapp))
      (setq Rtn nil)
      (progn
         (vlax-put-property
            (vlax-invoke-method
               (vlax-get-property Xlapp "sheets" )
               "Add"
            )
            "name"
            Name
         )
         (setq Rtn (equal (vlxls-sheet-get-active xlapp) name))
      )
   )
   Rtn
)


;0·激活指定页面
;|
Examples:
(vlxls-sheet-put-active *xlapp* "Sheet1")==>T
(vlxls-sheet-put-active *xlapp* "NewSheet")==>T
|;
(defun vlxls-sheet-put-active (xlapp Name / sh)
   (if (null (vlxls-sheet-add xlapp name))
      (vlax-for sh (vlax-get-property Xlapp "sheets" )
         (if (= (vlax-get-property sh "Name" ) Name)
            (vlax-invoke-method sh "Activate" )
         )
      )
   )
   (equal (vlxls-sheet-get-active xlapp) name)
)


不知道有没有大神可以教下怎么做到这样的效果


edata 发表于 2019-8-5 22:16:14

可以复制sheet然后改个名字就行了..
如果模板是文件,可以尝试在add的时候加入文件路径及文件名字符串做为模板新建..
(vlax-invoke-method
               (vlax-get-property Xlapp "sheets" )
               "Add" ""文件路径及文件名
            )

Eltrion 发表于 2019-8-6 13:58:24

edata 发表于 2019-8-5 22:16
可以复制sheet然后改个名字就行了..
如果模板是文件,可以尝试在add的时候加入文件路径及文件名字符串做为 ...

如果是复制sheet改名的话在lsp里要怎么操作呢

Eltrion 发表于 2019-8-9 22:02:51

本帖最后由 Eltrion 于 2019-8-9 22:04 编辑

edata 发表于 2019-8-5 22:16
可以复制sheet然后改个名字就行了..
如果模板是文件,可以尝试在add的时候加入文件路径及文件名字符串做为 ...
还有大神如果使用你给的代码
(vlax-invoke-method
                (vlax-get-property *Xlapp* 'sheets )
                'Add"C:\\Users\\Eltrion\\Desktop\\aaa\\aaa.xlsx"
            )

就会提示; 错误: Automation 错误。 类 Sheets 的 Add 方法无效按照你的原文也是一样请问要怎么处理呢   路径是没有问题的
页: [1]
查看完整版本: excel怎么以现有的页面为模板新增页面