希望在当前xls中复制某个 sheet,应该怎么做
只知道如何新增工作表但那只是一个空白的工作表
我希望的是将一个工作表完全复制
就好像excel菜单中的“移动或复制工作表”
查了很久没找到
有谁知道吗
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)
) 这是找到的一些资料
【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")
然后就不知道该怎么做了
顶一下
附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
)
感觉复制页是可以实现的
试了很久没有结果
其实如果只是需要被复制页中的单元数值
可以旧页取值新建页中赋值
这都不是问题
但是旧页里有公式啊
复制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)
)
其实用一楼的excel vba代码,再翻译一下,基本就可以实现了 Gu_xl 发表于 2013-4-9 15:44 static/image/common/back.gif
复制Excel的表单代码示例 如下:
G斑真是牛得一塌糊涂啊
还有两个问题再请教一下
1.
页面复制完成后
该页面处于一个全选状态
能不能让选择的区域只位于"A1"单元格?
2.
要复制的页面内含有图片
示例代码不能连图片一同复制
这个有办法解决吗? 版主真的是厉害 太猛了 无法言喻 楼主你好我没看懂是要做什么用的
页:
[1]