明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 513|回复: 3

[提问] excel怎么以现有的页面为模板新增页面

[复制链接]
发表于 2019-8-5 20:45:25 | 显示全部楼层 |阅读模式
在论坛看到一个vlsp操作excel的相关函数合集  里面有操作页面的函数  但好像没有我需要的这种  就是比如现在有页面sheet1   里面做好了一些模板  怎样以sheet1为模板新建一个页面sheet2
下面是函数合集里关于页面操作的函数


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


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


  20. ;0·删除页面
  21. ;|
  22. Examples:
  23. (vlxls-sheet-delete *xlapp* "Sheet1")  ==>  T
  24. (vlxls-sheet-delete *xlapp* "UnExistingSheet")  ==>  NIL
  25. |;
  26. (defun vlxls-sheet-delete (xlapp Name / sh Rtn)
  27.    (setq Rtn (vlxls-sheet-get-all Xlapp))
  28.    (vlax-for sh (vlax-get-property Xlapp "sheets" )
  29.       (if (= (vlax-get-property sh "Name" ) Name)
  30.          (vlax-invoke-method sh "Delete" )
  31.       )
  32.    )
  33.    (not (equal Rtn (vlxls-sheet-get-all Xlapp)))
  34. )


  35. ;0·更改页名称
  36. ;|
  37. Examples:
  38. (vlxls-sheet-rename "New" "Sheet1" *xlapp*)  ==>  T
  39. (vlxls-sheet-rename "New" NIL *xlapp*)  ==>  T
  40. (vlxls-sheet-rename "Sheet3" NIL *xlapp*)  ==>  NIL
  41. (vlxls-sheet-rename "Sheet2" "Sheet1" *xlapp*)  ==>  NIL
  42. (vlxls-sheet-rename "Sheet2" "UnExistSheet" *xlapp*)  ==>  NIL
  43. |;
  44. (defun vlxls-sheet-rename (New Old Xlapp / sh Rtn)
  45.    (if (null old)
  46.       (setq old (msxl-get-name (msxl-get-activesheet Xlapp)))
  47.    )
  48.    (if (member New (vlxls-sheet-get-all Xlapp))
  49.       (setq Rtn nil)
  50.       (progn
  51.          (vlax-for sh (vlax-get-property Xlapp "sheets" )
  52.             (if (= (msxl-get-name sh) Old)
  53.                (msxl-put-name sh New)
  54.             )
  55.          )
  56.          (setq Rtn
  57.             (equal New
  58.                (vlax-get-property (msxl-get-ActiveSheet Xlapp) 'name)
  59.             )
  60.          )
  61.       )
  62.    )
  63.    Rtn
  64. )


  65. ;0·新增页
  66. ;|
  67. Examples:
  68. (vlxls-sheet-add *xlapp* "Sheet1")  ==>  T
  69. (vlxls-sheet-add *xlapp* NIL)  ==>  T
  70. (vlxls-sheet-add *xlapp* "NewSheet")  ==>  NIL
  71. |;
  72. (defun vlxls-sheet-add (xlapp Name / Rtn)
  73.    (if (member name (vlxls-sheet-get-all xlapp))
  74.       (setq Rtn nil)
  75.       (progn
  76.          (vlax-put-property
  77.             (vlax-invoke-method
  78.                (vlax-get-property Xlapp "sheets" )
  79.                "Add"
  80.             )
  81.             "name"
  82.             Name
  83.          )
  84.          (setq Rtn (equal (vlxls-sheet-get-active xlapp) name))
  85.       )
  86.    )
  87.    Rtn
  88. )


  89. ;0·激活指定页面
  90. ;|
  91. Examples:
  92. (vlxls-sheet-put-active *xlapp* "Sheet1")  ==>  T
  93. (vlxls-sheet-put-active *xlapp* "NewSheet")  ==>  T
  94. |;
  95. (defun vlxls-sheet-put-active (xlapp Name / sh)
  96.    (if (null (vlxls-sheet-add xlapp name))
  97.       (vlax-for sh (vlax-get-property Xlapp "sheets" )
  98.          (if (= (vlax-get-property sh "Name" ) Name)
  99.             (vlax-invoke-method sh "Activate" )
  100.          )
  101.       )
  102.    )
  103.    (equal (vlxls-sheet-get-active xlapp) name)
  104. )


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


发表于 2019-8-5 22:16:14 | 显示全部楼层
可以复制sheet然后改个名字就行了..
如果模板是文件,可以尝试在add的时候加入文件路径及文件名字符串做为模板新建..
(vlax-invoke-method
               (vlax-get-property Xlapp "sheets" )
               "Add" ""文件路径及文件名
            )
 楼主| 发表于 2019-8-6 13:58:24 | 显示全部楼层
edata 发表于 2019-8-5 22:16
可以复制sheet然后改个名字就行了..
如果模板是文件,可以尝试在add的时候加入文件路径及文件名字符串做为 ...

如果是复制sheet改名的话在lsp里要怎么操作呢
 楼主| 发表于 2019-8-9 22:02:51 | 显示全部楼层
本帖最后由 Eltrion 于 2019-8-9 22:04 编辑
edata 发表于 2019-8-5 22:16
可以复制sheet然后改个名字就行了..
如果模板是文件,可以尝试在add的时候加入文件路径及文件名字符串做为 ...

还有大神  如果使用你给的代码
  1. (vlax-invoke-method
  2.                 (vlax-get-property *Xlapp* 'sheets )
  3.                 'Add  "C:\\Users\\Eltrion\\Desktop\\aaa\\aaa.xlsx"
  4.             )
复制代码


就会提示; 错误: Automation 错误。 类 Sheets 的 Add 方法无效  按照你的原文也是一样  请问要怎么处理呢   路径是没有问题的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-18 16:31 , Processed in 0.156824 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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