masterlong 发表于 2013-4-8 05:26:59

希望在当前xls中复制某个 sheet,应该怎么做

只知道如何新增工作表
但那只是一个空白的工作表
我希望的是将一个工作表完全复制
就好像excel菜单中的“移动或复制工作表”
查了很久没找到
有谁知道吗

Gu_xl 发表于 2013-4-10 11:23:31

masterlong 发表于 2013-4-10 01:06 static/image/common/back.gif
G斑真是牛得一塌糊涂啊
还有两个问题再请教一下



;;复制Excel整个表单示例代码:By Gu_xl

(defun c:tt (/ XLSFILE XLAPP SH1 SHEETS I FLAG SH2)
(cond
    ((not
       (setq xlsfile (getfiled "打开Excel文件" "test.xls" "xls" 4))
       )
   )
    ((VL-CATCH-ALL-ERROR-P
       (setq xlapp (VL-CATCH-ALL-APPLY
                     'vlax-get-or-create-object
                     (list "Excel.Application")
                     )
             )
       )
   (alert "不能创建EXCEL应用程序")
   )
    (t
   (vlax-invoke-method
       (vlax-get-property xlapp 'WorkBooks)
       'Open
       xlsfile
       )
   (if (not
         (VL-CATCH-ALL-ERROR-P
             (setq sh1
                  (VL-CATCH-ALL-APPLY
                      'vlax-get-property
                      (list
                        (setq sheets
                               (vlax-get-property Xlapp "sheets")
                              )
                        'item
                        "Sheet1" ;_ 要复制的表单,具体名称可自己修改
                        )

                      )
                   )
             )
         )
       (progn
         ;;复制整个表单内容
         (vlax-invoke-method sh1 'copy sh1)
         (setq i 0
               flag t
               )
         (vlax-for sh sheets
         (if flag
             (if (equal sh sh1)
               (setq flag nil)
               (setq i (1+ i))
               )
             )
         )
         (setq sh2 (vlax-get-property sheets 'item i)) ;_ 取得复制后的表单
         (vlax-put-property sh2 'name "NewSheetAA") ;_ 修改复制后的表单名称
         )
       )
   (vlax-invoke-method
       (vlax-get-property Xlapp "ActiveWorkbook")
       "Save"
       ) ;_ 存盘
   (vla-put-visible xlapp 1) ;_ 显示Excel
   (vlax-release-object Xlapp) ;_ 释放内存
   )
    )
(princ)
)

masterlong 发表于 2013-4-8 05:47:38

这是找到的一些资料

【1】
应用于 Chart、Charts、Sheets、Worksheet 和 Worksheets 对象的 Copy 方法。

将指定工作表复制到工作簿的另一位置。

expression.Copy(Before, After)

expression      必需。该表达式返回上面的对象之一。

Before      Variant 类型,可选。指定某工作表,复制的工作表将置于此工作表之前。如果已经指定了 After,则不能指定 Before。

After      Variant 类型,可选。指定某工作表,复制的工作表将置于此工作表之后。如果已经指定了 Before,则不能指定 After。


【2】
应用于 Chart、Charts、Sheets、Worksheet 和 Worksheets 对象的 Copy 方法。

本示例复制工作表 Sheet1,并将其放置在工作表 Sheet3 之后。

Worksheets("Sheet1").Copy After:=Worksheets("Sheet3")


然后就不知道该怎么做了

masterlong 发表于 2013-4-9 12:03:40

顶一下

附vlxls函数集中新增页的代码

;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
)

感觉复制页是可以实现的
试了很久没有结果
其实如果只是需要被复制页中的单元数值
可以旧页取值新建页中赋值
这都不是问题
但是旧页里有公式啊

Gu_xl 发表于 2013-4-9 15:44:21

复制Excel的表单代码示例 如下:


;;复制Excel的表单代码示例 By Gu_xl 2013.04.09
(defun c:tt (/ XLAPP SH1 SH2 CELLS1 CELLS2 xlsfile)
(cond
    ((not (setq xlsfile (getfiled "打开Excel文件" "" "xls" 4))))
    ((VL-CATCH-ALL-ERROR-P
         (setq xlapp (VL-CATCH-ALL-APPLY
                     'vlax-get-or-create-object
                     (list "Excel.Application")
                     )
               )
         )
      (alert "不能创建EXCEL应用程序")
      )
    (t
   (vlax-invoke-method
       (vlax-get-property xlapp 'WorkBooks)
       'Open
       xlsfile
       )
   (if (not
         (VL-CATCH-ALL-ERROR-P
             (setq sh1
                  (VL-CATCH-ALL-APPLY
                      'vlax-get-property
                      (list
                        (vlax-get-property Xlapp "sheets")
                        'item
                        "Sheet1" ;_ 要复制的表单,具体名称可自己修改
                        )
                      )
                   )
             )
         )
       (progn
         (vlax-put-property
         (setq sh2
                  (vlax-invoke-method
                  (vlax-get-property Xlapp "sheets")
                  "Add"
                  )
               )
         "name"
         "NewSheet" ;_ 新增的表单,具体名称可自己修改
         )
         (vla-Activate sh1)
         (setq cells1 (vlax-get-property sh1 'cells))
         (vlax-invoke-method cells1 'copy) ;_ 复制表单Sheet1到粘贴板
         (vla-Activate sh2)
         (setq cells2 (vlax-get-property sh2 'cells))
         (vlax-invoke-method cells2 'PasteSpecial -4104 -4142) ;_ 从粘贴板复制到新增的表单
         )
       )
         (vlax-invoke-method
         (vlax-get-property Xlapp "ActiveWorkbook")
         "Save"
         ) ;_ 存盘
         (vla-put-visible xlapp 1) ;_ 显示Excel
         (vlax-release-object Xlapp) ;_ 释放内存
   )
    )
(princ)
)

xiaxiang 发表于 2013-4-9 16:33:21

其实用一楼的excel vba代码,再翻译一下,基本就可以实现了

masterlong 发表于 2013-4-10 01:06:53

Gu_xl 发表于 2013-4-9 15:44 static/image/common/back.gif
复制Excel的表单代码示例 如下:



G斑真是牛得一塌糊涂啊
还有两个问题再请教一下

1.
页面复制完成后
该页面处于一个全选状态
能不能让选择的区域只位于"A1"单元格?

2.
要复制的页面内含有图片
示例代码不能连图片一同复制
这个有办法解决吗?

zhangtieliang 发表于 2020-11-9 23:01:31

版主真的是厉害

zhangtieliang 发表于 2020-11-9 23:01:43

太猛了 无法言喻

664571221 发表于 2021-12-5 15:33:19

楼主你好我没看懂是要做什么用的
页: [1]
查看完整版本: 希望在当前xls中复制某个 sheet,应该怎么做