excel加了一句$oExcel.WorkSheets(2).Select就不能运行了
本帖最后由 空城的守望 于 2013-10-24 09:06 编辑#include <excel.au3>
$sFilePath = @ScriptDir & "\test.xls"
$oExcel = _ExcelBookOpen ($sFilePath,1,False)
;$oExcel.WorkSheets(2).Select
Dim $i=1,$j=4
Dim $yalurow=$oExcel.activesheet.usedrange.rows.count
While $i<=$yalurow
If StringStripWS( _ExcelReadCell($oExcel, $i, 7), 8)="发运订单" Then
$oExcel.sheets("data").Cells($j, 2).Value = $oExcel.Sheets("yalu").Cells($i + 2, 2).Text
$oExcel.sheets("data").Cells($j, 3).Value = $oExcel.Sheets("yalu").Cells($i + 2, 2).Text
$oExcel.sheets("data").Cells($j, 4).Value = $oExcel.Sheets("yalu").Cells($i + 2, 8).Text
$oExcel.sheets("data").Cells($j, 6).Value = StringStripWS( $oExcel.Sheets("yalu").Cells($i + 2, 4).Text, 8)
$oExcel.sheets("data").Cells($j, 26).Value = "电子秤;" & $oExcel.Sheets("yalu").Cells($i + 1, 2).Text
$i = $i + 9
Do
If $oExcel.Sheets("yalu").Cells($i, 1).Text = "总数量" Then
$oExcel.sheets("data").Cells($j, 9).Value = $oExcel.Sheets("yalu").Cells($i, 2).Text
$i = $i + 2
$j = $j + 1
ExitLoop
Else
$i=$i+1
EndIf
Until $i >= $yalurow
EndIf
Sleep(1000)
WEnd
_ExcelBookSave($oExcel)
$oExcel.WorkSheets(2).Select
MsgBox(0, "提示", "excel转换完成")
_ExcelBookClose($oExcel)为什么我加了$oExcel.WorkSheets(2).Select,我的程序就不能运行了,而且不加sleep(100),cpu占有率75左右,但我的循环不是死循环啊 而且在au3中执行效率远不如在vba中的效率 报错内容是什么?au3里执行效率应该比vba差不了多少吧 回复 3# kevinch
没有报错,就是一直在运行出不了结果!不加sleep的话cpu占有率很高。去掉$oExcel.WorkSheets(2).Select这句可以执行,大约在30秒出结果,而在vba中是立马出现的,请大神指导 回复 3# kevinch
我把附件也上传了,请大神看运行看一下 我也觉得vba处理Excel表格数据比au3快许多 我用Range对象操作的方式写了一个,感觉是有些慢,没办法,毕竟不是自己的对象,总要去“求人办事”一样,所以会慢,其实vba本身操作range对象也快不了,不过操作对象时用with语句情况会好一点,不用什么事都从头找起$excel=ObjCreate("excel.application")
$excel.visible=True
$wb=$excel.workbooks.open(@ScriptDir & "\test.xls")
$rngs=$wb.worksheets("yalu").cells.find("发运订单")
If IsObj($rngs) Then
$rng=$rngs
With $wb.worksheets("data")
$n=.cells(.rows.count,2).end(3).row
EndWith
Do
$n+=1
With $wb.worksheets("data").cells($n,2)
.value=$rng.offset(2,-5).value
.offset(0,1).value=$rng.offset(2,-5).value
.offset(0,2).value=$rng.offset(2,1).value
.offset(0,4).value=$rng.offset(2,-3).value
.offset(0,7).value=$rng.offset(9,-5).value
.offset(0,24).value="电子秤;"&$rng.offset(1,-5).value
EndWith
$rng=$wb.worksheets("yalu").cells.findnext($rng)
Until $rng.address=$rngs.address
EndIf
$wb.close(true)
$excel.quit 用数组也写了一个,这个比较快,毕竟数组有各个语言自己的处理方式,相当于拿了别人的数据用自己擅长的方式处理,所以可以的话还是尽量用数组来处理数据好些,楼主的数据也算是很规范的,只是au3读取excel工作表得到的数组与excel表格或vba中读取的数组行列刚好相反,这个要绕一点,注意区别就好了$excel=ObjCreate("excel.application")
$excel.visible=True
$wb=$excel.workbooks.open(@ScriptDir & "\test.xls")
$arr=$wb.worksheets("yalu").usedrange.value
Dim $result
$i=-1
For $n=0 To UBound($arr,2)-1
If $arr[$n]<>"" Then
If StringReplace($arr[$n]," ","")="发运订单" Then
$i+=1
$result[$i]=$arr[$n+2]
$result[$i]=$arr[$n+2]
$result[$i]=$arr[$n+2]
$result[$i]=$arr[$n+2]
$result[$i]=$arr[$n+9]
$result[$i]="电子秤;"&$arr[$n+1]
$n+=9
EndIf
EndIf
Next
With $wb.worksheets("data")
.cells(.rows.count,2).end(3).offset(1).resize($i+1,UBound($result)).value=$result
EndWith
;MsgBox(0,"","OK")
$wb.close(true)
$excel.quit 回复 8# kevinch
谢谢大神给我改的代码,我再好好研究一下 同志们加油
页:
[1]