jydgod 发表于 2008-5-9 09:13:39

Excel合并

如何在不同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 编辑 ]

jydgod 发表于 2008-5-11 08:03:17

有人能帮忙吗??设备测试记录的文件太多..想合并起来...

penguinl 发表于 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


应该会对你有启发,你再去网上看看相关资料吧!具体我也没操作过,不能给你解答了!

jydgod 发表于 2008-5-11 09:39:23

EXCEL工作表在复制的时候,如果不指定复制的位置的话,会新建一个一个工作表,,不会保存在剪切板内.那个EXCEL的UDF我也看了,解决不了.头疼..难道要复制工作表的内容?:face (13):

广布元德 发表于 2008-5-11 16:23:11

建议 提问前先阅读《提问的艺术》

jydgod 发表于 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))
简单的写了一下。可以看出我是什么意思。。哪个高手帮我下。。

xwjsyyx 发表于 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 编辑 ]

jydgod 发表于 2008-5-12 18:44:58

谢啦,我搞定了..公司网坏了.没上传

xwjsyyx 发表于 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
   $fpath = $v&"\"&$v[$i] ;文件路径
next

jydgod 发表于 2008-5-14 09:47:14

原帖由 xwjsyyx 于 2008-5-13 22:40 发表 http://www.autoitx.com/images/common/back.gif
建议:
$var = FileOpenDialog($message, @DesktopCommonDir & "\", "Excel文件 (*.csv)", 1 + 4)
$var可变为数组,所以可以不用新建filename.txt文件!
$v = StringSplit($var,"|")
for $i=2 to $v
   ...
谢谢.....:face (29): 偶像...我刚学还不知道这个东西...又学会一点..

zxxsm 发表于 2014-11-2 08:33:14

好思路,谢谢楼主

aiwen0092 发表于 2015-1-5 23:39:36

恩,来学习学习哈
页: [1]
查看完整版本: Excel合并