请教一个将结果内容回写到excel中的效率算法
一个excel文件,有N行14列,请查看附件中的excel一个INI文件,请查看附件中的INI
现在的目的是想把INI中的结果导入到excel的第3列中,为了保证不蹿行。所以就想先比对下ini的和excel第一列的内容是否一样,如果一样才将结果写入excel
以下是我的代码,效率太差了。内容少的时候还不觉得,内容上W以后比蜗牛还慢。请大家帮忙看能不能优化一下,谢谢了
#include <Excel.au3>
#include <File.au3>
#include <ie.au3>
#include <array.au3>
#include <winapi.au3>
#include <_Ini.au3>
_initoexcel()
Func _initoexcel()
$weizzz = _IniReadSection('结果.ini', '结果')
_arraydisplay ($weizzz)
$oExcel = _ExcelBookOpen(@ScriptDir & '\test.xlsx', 1)
If Not @error Then
$oExcelline = $oExcel.activesheet.usedrange.rows.count
$arr1 = $oExcel.activesheet.range("a1").resize($oExcelline, 14).value ;
$arr2 = $arr1
$ddf = 1
For $xc = 1 To $weizzz
For $i = 0 To $oExcelline - $ddf
If $weizzz[$xc] = $arr1[$i] Then
$arr2[$i] = $weizzz[$xc]
ExitLoop
EndIf
Next
Next
$oExcel.activesheet.range("a1").resize($oExcelline, 14).value = $arr2
EndIf
_ExcelBookClose($oExcel, 1, 0) ;在没有任何提示的情况下保存并关闭工作表, 可选参数:0 = 不提示(默认值), 1 = 提示
ProcessClose('Excel.exe')
EndFunc ;==>_initoexcel
附件中包含所需的文件,请下载查看详情
本帖最后由 netegg 于 2012-11-27 07:49 编辑
#Include <Excel.au3>
_ExcelWriteSheetFromArray
ini读出二维数组直接填,保证对应的上,然后再插入一列就完了 Func _initoexcel()
$weizzz = _IniReadSection('结果.ini', '结果')
$dic=ObjCreate("scripting.dictionary")
For $n=1 To $weizzz
$dic($weizzz[$n])=$weizzz[$n]
Next
$excel=ObjCreate("excel.application")
$excel.visible=False
$wb=$excel.workbooks.open(@ScriptDir&"\test.xlsx")
With $wb.activesheet
$arr=.range("a1",.cells.specialcells(11)).value
For $n=1 To UBound($arr,2)-1
If $dic.exists($arr[$n]) Then $arr[$n]=$dic($arr[$n])
Next
.range("a1").resize(UBound($arr,2),UBound($arr)).value=$arr
EndWith
$wb.close(true)
$excel.quit
$dic=0
$wb=0
$excel=0
EndFunc换成这个试下 本帖最后由 blue_dvd 于 2012-11-28 08:35 编辑
回复 3# kevinch $dic($weizzz[$n])=$weizzz[$n]这句是什么意思?.cells.specialcells(11)这个又是什么意思?给个解释吧!谢谢 本帖最后由 kevinch 于 2012-11-28 09:46 编辑
$dic($weizzz[$n])=$weizzz[$n];以$weizzz[$n]为key值,$weizzz[$n]为item项内容,将一一对应关系存入字典中,字典是利用hash原理,可以快速根据key值取得对应的item值
.cells.specialcells(11);工作表中最后一个单元格的表示方式,11在vba中对应此函数的常量名是xlCellTypeLastCell总体而言就是先将ini中的内容一一对应的放入字典中,因为字典可以根据key值快速提取item值内容,所以将单元格区域读入数组后,快速提取内容修改数组对应内容,然后写回工作表,虽然读取ini的速度不能算慢,但实测字典还是比直接读取ini快超多倍
页:
[1]