找回密码
 加入
搜索
查看: 10153|回复: 19

[AU3基础] [已解决]EXC求助

  [复制链接]
发表于 2014-5-30 01:12:59 | 显示全部楼层 |阅读模式
本帖最后由 枫飞秋语 于 2015-8-13 16:58 编辑

求助,如何把EXC任意单元格执行send("^c")后的复制内容写入另一个表格的指定单元格..变量怎么定义!
谢谢!
发表于 2014-5-30 09:03:01 | 显示全部楼层
你的代码呢,看一下
 楼主| 发表于 2014-5-30 09:32:11 | 显示全部楼层
回复 2# kevinch
Dim $1, $2, $3, $4, $5, $6, $i, $s
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <ComboConstants.au3>
#include <Excel.au3>
#include <ButtonConstants.au3> ;按钮框的样式
#Region ### START Koda GUI section ### Form=c:\documents and settings\administrator\桌面\form1.kxf
$Form1_1 = GUICreate("核算工具", 185, 210, 281, 167)
$Input1 = GUICtrlCreateInput("", 68, 60, 109, 21)
$Label1 = GUICtrlCreateLabel("结算表格:", 8, 66, 60, 17)
$Label2 = GUICtrlCreateLabel("方向:", 8, 97, 40, 17)
$Label7 = GUICtrlCreateLabel("方向:", 8, 157, 40, 17)
$Combo1 = GUICtrlCreateCombo(" ", 48, 91, 41, 21, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "左|右")
$Combo2 = GUICtrlCreateCombo(" ", 48, 153, 41, 21, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "左|右")
$Label4 = GUICtrlCreateLabel("工单表格:", 8, 128, 60, 17)
$Input3 = GUICtrlCreateInput("", 68, 122, 109, 21)
$Label3 = GUICtrlCreateLabel("F1为电话", 53, 8, 73, 17)
$Label5 = GUICtrlCreateLabel("` 为注册", 53, 24, 76, 17)
$Label6 = GUICtrlCreateLabel("F2为姓名", 53, 40, 76, 17)
$Label8 = GUICtrlCreateLabel("次数:", 98, 97, 40, 17)
$Label9 = GUICtrlCreateLabel("次数:", 98, 157, 40, 17)
$Input2 = GUICtrlCreateInput("", 135, 91, 41, 21) ;输出次
$Input4 = GUICtrlCreateInput("", 135, 153, 41, 21) ;输入次
$stop = GUICtrlCreateButton("停止(&T)", 55, 180, 81, 23, 1)
GUICtrlSetState($stop, $GUI_HIDE)
$go = GUICtrlCreateButton("开始(&S)", 55, 180, 81, 23, 1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Label1
                Case $Label2
                Case $Label3
                Case $go
                        go()
                Case $stop
                        stop()
        EndSwitch
WEnd

Func go()
        $1 = GUICtrlRead($Input1)
        $2 = GUICtrlRead($Input2)
        $3 = GUICtrlRead($Input3)
        $4 = GUICtrlRead($Input4)
        If GUICtrlRead($Combo1) = "左" Then
                $5 = "left"
        ElseIf GUICtrlRead($Combo1) = "右" Then
                $5 = "right"
        ElseIf GUICtrlRead($Combo1) = " " Then
                $5 = " "
        EndIf
        If GUICtrlRead($Combo2) = "左" Then
                $6 = "left"
        ElseIf GUICtrlRead($Combo2) = "右" Then
                $6 = "right"
        ElseIf GUICtrlRead($Combo2) = " " Then
                $6 = " "
        EndIf
        GUICtrlSetState($Input1, $GUI_DISABLE)
        GUICtrlSetState($Input2, $GUI_DISABLE)
        GUICtrlSetState($Input3, $GUI_DISABLE)
        GUICtrlSetState($Input4, $GUI_DISABLE)
        GUICtrlSetState($Combo1, $GUI_DISABLE)
        GUICtrlSetState($Combo2, $GUI_DISABLE)
        GUICtrlSetState($go, $GUI_HIDE)
        GUICtrlSetState($stop, $GUI_SHOW + $GUI_FOCUS)
        HotKeySet("{F2}", "gui")
        WinSetState("核算工具", "", @SW_MINIMIZE)
EndFunc   ;==>go

Func stop()
        GUICtrlSetState($Input1, $GUI_ENABLE)
        GUICtrlSetState($Input2, $GUI_ENABLE)
        GUICtrlSetState($Input3, $GUI_ENABLE)
        GUICtrlSetState($Input4, $GUI_ENABLE)
        GUICtrlSetState($Combo1, $GUI_ENABLE)
        GUICtrlSetState($Combo2, $GUI_ENABLE)
        GUICtrlSetState($go, $GUI_SHOW)
        GUICtrlSetState($stop, $GUI_HIDE)
        HotKeySet("{F2}")
EndFunc   ;==>stop

Func gui()
        $i = 1
        $S = InputBox("次数提示", "请输入查询总数")

        Local $sFilePath1 = @ScriptDir & "" & $1 ;此文件应该已存在
        Local $oExce1 = _ExcelBookOpen($sFilePath1)
        Local $sFilePath2 = @ScriptDir & "" & $3 ;此文件应该已存在
        Local $oExce2 = _ExcelBookOpen($sFilePath2)

        Sleep(1500)
        While $i <= $S
                Sleep(500)
                Local $sCellValue = _ExcelReadCell($oExce1, $i +19, 2)
                Send("^f")
                Send($sCellValue)
                Send("!f")
                WinActivate($3)
                Sleep(500)
                If WinExists("Microsoft Excel", "Microsoft Office Excel 找不到正在搜索的数据") = 1 Then
                        Send("{space}")
                        Sleep(200)
                        Send("{esc}")
                        Sleep(500)
                        WinActivate($1)
                Else
                        Sleep(500)
                        Send("{esc}")
                        Sleep(200)
                        Send("{" & $6 & " " & $4 & "}")
                        Sleep(500)
;                        Local $sCellValue2 = _ExcelReadCell($oExce2,,6,)
                Sleep(200)
                Send("^c")
 Local $sCellValue2 = Send("^c")
                        Sleep(500)
                        WinActivate($1)
                        Sleep(500)
                        _ExcelWriteCell($oExce1,  $sCellValue2, $i +19, 4)

                        Sleep(500)
                EndIf
                Sleep(200)
                Sleep(200)
                $i = $i + 1
                If $i > $S Then
                        MsgBox(4096, "操作完成", "已操作 " & $S & " 次")
                EndIf
        WEnd
EndFunc   ;==>gui
发表于 2014-5-30 10:06:43 | 显示全部楼层
本帖最后由 kevinch 于 2014-5-30 10:19 编辑
        While $i <= $S
                Local $sCellValue = _ExcelReadCell($oExce1, $i +19, 2)
        $rng=$oExce1.activesheet.cells.find($sCellValue)
        If IsObj($rng) Then _ExcelWriteCell($oExce2,  $rng.value, $i +19, 4)
                $i = $i + 1
                If $i > $S Then
                        MsgBox(4096, "操作完成", "已操作 " & $S & " 次")
                EndIf
        WEnd
我只能猜测你是想在1里找到写到2里

最好你描述一下实际情况,你上面代码的处理效果与稳定性都不太好吧
 楼主| 发表于 2014-5-30 10:21:54 | 显示全部楼层
本帖最后由 枫飞秋语 于 2014-5-30 10:30 编辑

回复 4# kevinch


    额.是这样的,,读取表1(20,2)的内容,在表2里查询到相同内容(假设查询到的位置是60,2).但是我要复制的内容是(60,5)的..(查询到后方向键右移几个单元格)..然后把这个单元格的内容写入到表1的(20,4)的单元格去



不知道怎么解释了,,能看懂么?~!
发表于 2014-5-30 10:33:11 | 显示全部楼层
本帖最后由 kevinch 于 2014-5-30 10:34 编辑
$str=$oExce1.activesheet.cells(20,2).value
$rng=$oExce2.activesheet.cells.find($str)
if isobj($rng) then $oExce1.activesheet.cells(20,4).value=$rng.offset(0,3).value
这样试下
 楼主| 发表于 2014-5-30 10:34:16 | 显示全部楼层
回复 4# kevinch


  能否这样写?  表1读取某个单元格信息,在表2找到相同单元格,读取此单元格后第3格的的内容,写入到表1里某个单元格,,,


大致是这个意思吧~!
 楼主| 发表于 2014-5-30 10:40:23 | 显示全部楼层
回复 6# kevinch


    能帮简单注释下么?
 楼主| 发表于 2014-5-30 10:40:44 | 显示全部楼层
本帖最后由 枫飞秋语 于 2014-5-30 10:42 编辑
这样试下
kevinch 发表于 2014-5-30 10:33



好像有看懂点了~!我试试,谢谢哈~!
 楼主| 发表于 2014-5-30 12:48:44 | 显示全部楼层
回复 6# kevinch


    非常的感谢您,,,这个代码完全是我想要的,,,又快,又简洁,,,,佩服啊~!
 楼主| 发表于 2014-5-30 14:22:58 | 显示全部楼层
这样试下
kevinch 发表于 2014-5-30 10:33



    大师,能帮增加一点内容么?..
在表2查询内容后,在后几格,写入一个字节做个标记,然后才把offset(0,3)写入表1
发表于 2014-5-30 14:55:36 | 显示全部楼层
第三句的赋值语句你可以参考修改
 楼主| 发表于 2014-5-30 16:13:32 | 显示全部楼层
第三句的赋值语句你可以参考修改
kevinch 发表于 2014-5-30 14:55



    额.不是很懂改,,,原因表2查询到的位置是随机行,,不知道怎么定义此行去写入..
发表于 2014-5-30 17:37:18 | 显示全部楼层
用ClipPut ( "value" )
然后 ClipGet ( )
 楼主| 发表于 2014-5-30 19:17:38 | 显示全部楼层
回复 14# Linda


   哈,谢谢了..剪贴板,,,晕死,,怪不得我一直找剪切板,,搜不到帮助内容....

目前已经"kevinch"大哥的代码了.很精简很效率,,,,,不过还是要谢谢你的帮助!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-28 04:20 , Processed in 0.244417 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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