_LK_一生所爱 发表于 2012-1-26 18:23:42

本帖最后由 _LK_一生所爱 于 2012-1-26 18:25 编辑



柜号                   卸船                   拆箱/返空                   装箱/提柜                   堆存期
OOLU10985002011-12-16 8:51        2011-12-26 8:51        NoDatas                         NA
OOLU12441012011-12-12 23:12        2011-12-26 8:51        2011-12-29 8:51       14
OOLU13475212011-12-19 20:59        NoDatas                      2011-12-27 8:51       8
OOLU16857662012-1-2 21:39        2011-12-26 8:51        NoDatas                         NA
OOLU19800622011-12-12 23:12        2011-12-26 8:51        2011-12-29 8:51       14
OOLU28473052011-12-12 23:12        2011-12-26 8:51        2011-12-29 8:51       14

果然是高手啊!!很想见识和学习下AU3的速度和效果是怎样的!!

就是在附件的每个小文件里(2500多个)提取“卸船”的时间之后是 “拆箱”/“收返空箱”的数据(每个表格只是其中的一种)
特殊情况会没有这2个数据,那就提取 “收返重箱” 的数据   再没有就提取 “装船” 的数据。

之后生成上面的数据的样子在一个电子表格里。(没有的数据写上NoDatas或者NA都可以)

_LK_一生所爱 发表于 2012-1-26 18:27:34

DEAR kevinch 请问您可以加我QQ吗 ^^

my QQ: 503735347

kevinch 发表于 2012-1-26 21:18:37

;#include <array.au3>

$file=FileOpenDialog("请选择数据文件:",@MyDocumentsDir&"\","Excel文件 (*.xls?;*.xls)",4)
If @error Then Exit 0

Dim $result
If StringInStr($file,"|")>0 Then
        $arr=StringSplit($file,"|",2)
        For $n=1 To UBound($arr)-1
                $arr[$n]=$arr&"\"&$arr[$n]
        Next
Else
        Dim $arr
        $arr=$file
EndIf
;_ArrayDisplay($arr)

$result="柜号"
$result="卸船"
$result="拆箱/返空"
$result="装箱/提柜"
$result="堆存期"

$excel=ObjCreate("excel.application")
$excel.visible=False
$excel.displayalerts=False

For $n=1 To UBound($arr)-1
        If FileExists($arr[$n]) Then
                $t=UBound($result,2)
                ReDim $result[$t+1]
                $wb=$excel.workbooks.open($arr[$n])
                $rng=0
                With $wb.activesheet
                        $result[$t]=.range("d7").value
                        $rng=.cells.find("卸船")
                        If IsObj($rng) Then $result[$t]=.range("J"&$rng.row).formula
                        $rng=0
                        $rng=.cells.find("拆箱")
                        If IsObj($rng) Then
                                $result[$t]=.range("J"&$rng.row).formula
                        Else
                                $rng=0
                                $rng=.cells.find("收返空箱")
                                If IsObj($rng) Then
                                        $result[$t]=.range("J"&$rng.row).formula
                                Else
                                        $rng=0
                                        $rng=.cells.find("收返重箱")
                                        If IsObj($rng) Then
                                                $result[$t]=.range("J"&$rng.row).formula
                                        Else
                                                $rng=0
                                                $rng=.cells.find("装船")
                                                If IsObj($rng) Then
                                                        $result[$t]=.range("J"&$rng.row).formula
                                                Else
                                                        $result[$t]="NoDatas"
                                                EndIf
                                        EndIf
                                EndIf
                        EndIf
                        $rng=0
                        $rng=.cells.find("装箱")
                        If IsObj($rng) Then
                                $result[$t]=.range("J"&$rng.row).formula
                        Else
                                $rng=0
                                $rng=.cells.find("提箱返重")
                                If IsObj($rng) Then
                                        $result[$t]=.range("J"&$rng.row).formula
                                Else
                                        $result[$t]="NoDatas"
                                EndIf
                        EndIf
                        If $result[$t]<>"NoDatas" And $result[$t]<>"NoDatas" Then $result[$t]=Round(Number($result[$t])-Number($result[$t]),0)
                EndWith
                $wb.close(False)
        EndIf
Next
;_ArrayDisplay($result)

$excel.visible=True
$wb=$excel.workbooks.add
With $wb.activesheet
        .columns("B:D").numberformatlocal="yyyy-m-d hh:mm"
        For $n=0 To UBound($result)-1
                For $i=0 To UBound($result,2)-1
                        .cells($i+1,$n+1)=$result[$n][$i]
                Next
        Next
        .columns.autofit
EndWith
$excel.displayalerts=True
$wb=0
$excel=0结果不一定是正确的,不过方法就是这样的,试下

_LK_一生所爱 发表于 2012-1-26 21:54:07

kevinch 好犀利啊!!!!!果然是高高手啊!!!!!

不过好像我试了只有1800多行数据
不知道怎么优化一下可以一次都提取到呢
提取用了大概10分钟吧 ^^ 另外堆存期不对哦

kevinch 请问我应该看什么书才能自如地控制网页的基本操作和控制EXCEL呢?

kevinch 发表于 2012-1-26 22:06:25

1. 数据我只是依你所说的处理一下,至于堆存期是什么意思我也只是按照猜测来做了一下,具体需要你这个真正了解的人自己去修正;
2. 对于au3我也是学习中,不知道是au3的bug还是其他什么原因,fileopendialog里的类型我用1+4的话,全选可见工作簿时会出错,提示找不到文件,所以我用4加上后期的fileexists来代替,也许造成了一些工作簿未处理到;
3. 所有的这些技术都是从网上学习的,现在再还回网络,从未买过什么书,开放的互联网已经是最好的百科全书啦;
4. 感觉用au3可能不如直接在excel里用vba处理好,不过作为一种示范,还是个不错的题目。

_LK_一生所爱 发表于 2012-1-26 22:21:14

1. 不好意思我没有表达清楚,堆存期就是拆箱/返空减去卸船的时间 没有这个数据而有装箱/提柜数据就用这个数据减去卸船的时间,都没有就留空或者NA都可以的 ^^

2. 请问你都是自学编程的吗?你应该是学计算机的大学生吧 ^_^

3. EXCEL自家的东西当然是自家的处理软件厉害啦,毕竟是微软的工程师苦苦设计的啊,我觉得数据处理和数据库对我来说都用EXCEL就够了呢,毕竟我的工作只是数据繁多。

4. 具体的格式比如背景色 边框 黏贴数值 黏贴文本我都不知道怎么用AU3做哦,但是EXCEL的VBA说明很详细,依葫芦画瓢就OK了 不会的话甚至还可以录制宏 非常简单就能弄到代码了,但是AU3的代码 比如怎么运行宏按钮,我到现在还不知道呢~~

5. 你的自学能力真的非常强哦!!我看了AU3帮助文档里面操作IE的,一来全英文不容易阅读,二来基础有限,它的说明也太简单了,例子比较少,我看不懂呢,请问我应该怎么学习这方面的知识呢?

oceanwind 发表于 2012-1-27 21:35:50

也想学一下,。。。。

zitoy 发表于 2012-1-28 14:44:38

看“With”“EndWith”的帮助文件

_LK_一生所爱 发表于 2012-1-28 16:15:46

zitoy 您好,请问应该怎么写呢?

我是新人是小白呢~~还是不懂哦~~

_LK_一生所爱 发表于 2012-1-28 23:17:41

自己顶~~!!!!!

kk_lee69 发表于 2012-1-29 00:07:05

回复 25# _LK_一生所爱

沒實際測試但是你要找的東西 應該是這個

http://www.autoitx.com/forum.php?mod=viewthread&tid=13074&highlight=%BA%EA
页: 1 [2]
查看完整版本: 诚心求指导:AU3调用EXCEL VBA的代码是多少?