找回密码
 加入
搜索
查看: 9398|回复: 13

Excel合并

  [复制链接]
发表于 2008-5-9 09:13:39 | 显示全部楼层 |阅读模式
如何在不同excel之间实现工作表的复制?
感谢xwjsyyx的热心帮忙...
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("", 251, 64, -1, -1)
GUISetIcon("D:\008.ico")
$ButtonOk = GUICtrlCreateButton("确定(&O)", 143, 16, 83, 25, 0)
$Buttonchose = GUICtrlCreateButton("选择数据  ", 26, 16, 83, 25, 0)
GUISetState(@SW_SHOW)
GUICtrlSetState($Buttonchose,$GUI_FOCUS)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        FileDelete (@TempDir & "\filename.txt")
                        Exit
                Case $Buttonchose
                        If FileExists(@TempDir & "\filename.txt") Then FileDelete(@TempDir & "\filename.txt")
        
                        $message = "按ctrl或shift选择文件."

                        $var = FileOpenDialog($message, @DesktopCommonDir & "\", "Excel文件 (*.csv)", 1 + 4) 

                        If @error Then
                                MsgBox(16, "警告", "没有选中文件")
                        Else
                                $v = StringReplace($var, "|", @CRLF) ;
                                FileWrite(@TempDir & "\filename.txt", $v) 
                        EndIf
                Case $ButtonOk
                        If Not FileExists (@TempDir&"\filename.txt") Then 
                                        MsgBox (16,"警告","请先选择数据")
                        Else
                                GUICtrlSetState ($Buttonchose ,$GUI_DISABLE)
                                GUICtrlSetState ($ButtonOk ,$GUI_DISABLE)
                                $path = FileReadLine(@TempDir&"\filename.txt",1) ;读取路径
                                $oExcel=ObjCreate("Excel.Application")
                                $oExcel.Visible = 1
                                $NEW=$oExcel.WorkBooks.Add 
                                $i = 2
                                While $i < 200
                                        $file = FileReadLine(@TempDir&"\filename.txt",$i) ;读取文件名
                                        If @error = -1 Then
                                                $MSG = MsgBox (64,"","完成")
                                                If $MSG = 1 Then 
                                                        GUICtrlSetState ($Buttonchose ,$GUI_ENABLE)
                                                        GUICtrlSetState ($ButtonOk ,$GUI_ENABLE)
                                                        ExitLoop
                                                EndIf        
                                        EndIf
                                        $fpath = $path&"\"&$file ;文件路径
                                        $OPEN=$oexcel.workbooks.open ($fpath)
                                        $name = $oExcel.Activesheet.Cells(2, 10).Value
                                        $oExcel.ActiveSheet.Name = $name
                                        $OPEN.sheets(1).copy (Default,$NEW.sheets($i))
                                        $OPEN.close        (0)                                
                                        $i = $i + 1
                                WEnd
                        EndIf        
        EndSwitch
WEnd


[ 本帖最后由 jydgod 于 2008-5-12 19:39 编辑 ]
 楼主| 发表于 2008-5-11 08:03:17 | 显示全部楼层
有人能帮忙吗??设备测试记录的文件太多..想合并起来...
发表于 2008-5-11 08:36:14 | 显示全部楼层
au3的帮助里面有一段这样的文字:
使用 COM 进行自动化操作


一个相当流行的COM操作是"自动化"操作程序.  代替正规的Autoit操作函数,如:Send() 或者 WinActivate(),您可以使用对象来制作一个调用对象内部函数的程序.



这里有一个例子,来"自动化"操作Microsoft Excel:



$oExcel = ObjCreate("Excel.Application") ; 创建一个Excel 对象
$oExcel.Visible = 1                                        ; 显示 Excel 自己$oExcel.WorkBooks.Add                                      ; 添加一个新的工作表
$oExcel.ActiveWorkBook.ActiveSheet.Cells(1,1).Value= "test" ; 填写一个表格
sleep(4000)                                                ; 等待4秒
$oExcel.ActiveWorkBook.Saved = 1                           ; 模拟用户保存工作表
$oExcel.Quit                                               ; 退出 Excel  


应该会对你有启发,你再去网上看看相关资料吧!具体我也没操作过,不能给你解答了!
 楼主| 发表于 2008-5-11 09:39:23 | 显示全部楼层
EXCEL工作表在复制的时候,如果不指定复制的位置的话,会新建一个一个工作表,,不会保存在剪切板内.那个EXCEL的UDF我也看了,解决不了.头疼..难道要复制工作表的内容?
发表于 2008-5-11 16:23:11 | 显示全部楼层
建议 提问前先阅读《提问的艺术》
 楼主| 发表于 2008-5-11 21:01:14 | 显示全部楼层
$nExcel = ObjCreate ("Excel.Application")
        With $nExcel
                .Visible = 1
                .WorkBooks.add
        EndWith
$opExcel = ObjCreate ("Excel.Application")
        With $opExcel
                .Visible = 1
                .WorkBooks.Open(@ScriptDir&"\3.csv")
        EndWith
$opExcel.ActiveWorkbook.Sheets(1).copy (Default, $nExcel.ActiveWorkbook.Sheets(1))
简单的写了一下。可以看出我是什么意思。。哪个高手帮我下。。
发表于 2008-5-12 11:09:06 | 显示全部楼层
;;试试这个脚本:EXCEL表格导到另一个EXCEL表格
$path1=@ScriptDir&"\a.xls"
$path2=@ScriptDir&"\b.xls"

$yizhi=_excelgetvalue($path1,"Sheet1","B5")
_excelsetvalue($path2,"Sheet1","A4",$yizhi)

Func _excelgetvalue($pathname,$Sheetname,$name)
$xlApp = ObjCreate("Excel.Application") ;创建EXCEL对象
$xlBook = $xlApp.Workbooks.Open($pathname) ;打开已经存在的EXCEL工件簿文件
$xlApp.Visible = False ;设置EXCEL对象可见(或不可见)
$xlSheet = $xlBook.Worksheets($Sheetname) ;设置活动工作表
$re=$xlSheet.Range($name).Value
$xlBook.Close (True) ;关闭工作簿
$xlApp.Quit ;结束EXCEL对象
Return $re
EndFunc

Func _excelsetvalue($pathname,$Sheetname,$name,$value)
$xlApp = ObjCreate("Excel.Application") ;创建EXCEL对象
$xlBook = $xlApp.Workbooks.Open($pathname) ;打开已经存在的EXCEL工件簿文件
$xlApp.Visible = False ;设置EXCEL对象不可见
$xlSheet = $xlBook.Worksheets($Sheetname) ;设置活动工作表
$xlSheet.Range($name).Value=$value
$xlBook.Close (True) ;关闭工作簿
$xlApp.Quit ;结束EXCEL对象
EndFunc


[ 本帖最后由 xwjsyyx 于 2008-5-13 21:59 编辑 ]

评分

参与人数 1金钱 +5 收起 理由
jydgod + 5 谢谢热心帮忙.

查看全部评分

 楼主| 发表于 2008-5-12 18:44:58 | 显示全部楼层
谢啦,我搞定了..公司网坏了.没上传
发表于 2008-5-13 22:40:51 | 显示全部楼层
建议:
$var = FileOpenDialog($message, @DesktopCommonDir & "\", "Excel文件 (*.csv)", 1 + 4)
$var可变为数组,所以可以不用新建filename.txt文件!
$v = StringSplit($var,"|")
for $i=2 to $v[0]
     $fpath = $v[1]&"\"&$v[$i] ;文件路径
next

评分

参与人数 1金钱 +5 收起 理由
jydgod + 5 我很赞同

查看全部评分

 楼主| 发表于 2008-5-14 09:47:14 | 显示全部楼层
原帖由 xwjsyyx 于 2008-5-13 22:40 发表
建议:
[au3]$var = FileOpenDialog($message, @DesktopCommonDir & "\", "Excel文件 (*.csv)", 1 + 4)
$var可变为数组,所以可以不用新建filename.txt文件!
$v = StringSplit($var,"|")
for $i=2 to $v[0]
   ...

谢谢..... 偶像...我刚学还不知道这个东西...又学会一点..
zxxsm 该用户已被删除
发表于 2014-11-2 08:33:14 | 显示全部楼层
好思路,谢谢楼主
发表于 2015-1-5 23:39:36 | 显示全部楼层
恩,来学习学习哈
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-28 12:20 , Processed in 0.085688 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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