Что нового

[Автоматизация] Сохранение массива в Excel

gezan1

Новичок
Сообщения
46
Репутация
0
Господа гуру, подскажите, как сохранить новые данные с сайта (массив) в Excel, без потери раннее записанных, через
Код:
_ExcelWriteSheetFromArray


Код:
_ExcelWriteSheetFromArray($oExcel1,$a2DArray , 1+UBound($aArray1), 1, 0, 0)

Этот вариант хорош, но не работает.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
В каком месте не работает?
 
Автор
G

gezan1

Новичок
Сообщения
46
Репутация
0
Код:
while 1
 
$sText=_IEDocReadHTML ($oIE)
;ConsoleWrite ("$sText = " & $sText & @LF)
$sHTML = _IEDocReadHTML($oIE)
$sSubString = '(?si)<TR>.*?<TD colSpan=.*?.*?<SPAN class=evtNum>.*?</SPAN>(.+?)<.*?">(.+?)<.*?">(.+?)<.*?">(.+?)<'
if StringInStr($sHTML, $sSubString) = 0 then
  $aData = StringRegExp( $sText,$sSubString ,  3 ) 
;массив
Dim $a2DArray[(UBound($aData))/2][4] 
For $i = 0 To UBound($aData)-1 Step 4
    $a2DArray[$i/2][0] = $aData[$i]
    $a2DArray[$i/2][1] = $aData[$i+1]
	$a2DArray[$i/2][2] = $aData[$i+2]
	$a2DArray[$i/2][3] = $aData[$i+3]
Next

;_ArrayDisplay( $a2DArray)
endif
sleep (1000*60*2) 
_ExcelWriteSheetFromArray($oExcel,$a2DArray , 1+UBound($a2DArray), 1, 0,0);вот эта строка сохраняет новое, перезаписывая на то .что уже собрано. А надо,чтоб все сохранялось.
 $oExcel.Columns('A:F' ).EntireColumn.AutoFit
wend
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
gezan1,
Пример (работает в Excel 2003).
Код:
#include <Excel.au3>

Global Const $xlUp = -4162

$oError = ObjEvent('AutoIt.Error', '_Error')

If FileExists(@ScriptDir & '\Test.xls') Then
	$oExcel = _ExcelBookOpen(@ScriptDir & '\Test.xls')
Else
	$oExcel = _ExcelBookNew()
	_ExcelBookSaveAs($oExcel, @ScriptDir & '\Test')
EndIf

$iMaxRowCnt = $oExcel.Rows.Count

For $i = 1 To 10
	Sleep(3000)
	$iLastRow = $oExcel.Cells($iMaxRowCnt, 'A' ).End($xlUp).Row
	If $iLastRow > 1 Then $iLastRow += 1
	$aTmp = __RandomArray(Random(10, 50, 1), 4)
	If $iLastRow + UBound($aTmp) > $iMaxRowCnt Then ExitLoop;или создаем, если надо, новый лист и переходим на него
	$aTmp[0][0] = StringFormat('%02d:%02d:%02d', @HOUR, @MIN, @SEC)
	_ExcelWriteSheetFromArray($oExcel, $aTmp, $iLastRow, 1, 0, 0)
Next
$oExcel.Columns('A:D' ).EntireColumn.AutoFit
_ExcelBookClose($oExcel)

Func __RandomArray($i_RowCnt, $i_ColumnCnt)
	Local $a_Ret[1]
	ReDim $a_Ret[$i_RowCnt][$i_ColumnCnt]
	For $i = 0 To $i_RowCnt - 1
		For $j = 0 To $i_ColumnCnt - 1
			$a_Ret[$i][$j] = Random(1000, 100000, 1)
		Next
	Next
	Return $a_Ret
EndFunc   ;==>__RandomArray

Func __Error()
	ConsoleWrite('Error!!! ' & $oError.scriptline & @LF)
EndFunc   ;==>__Error
 
Автор
G

gezan1

Новичок
Сообщения
46
Репутация
0
madmasles
Спасибо. Пример очень красивый.
Но не получается подогнать под себя. :scratch:
Пожалуйста поясни- 1) для чего глобальная переменная -4162 ?
2)
Код:
.Rows.Count

что это?
3)
Код:
.Cells.End.Row

что это?
Остальное вроде понятно, Непонятно как соединить со своим скриптом?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
Автор
G

gezan1

Новичок
Сообщения
46
Репутация
0
Сайт может быть любой, тот-же яндекс.
Конечная цель, чтобы любая таблица не просто сохранялась, а дописовалась ниже(или выше) ранее сораненной.
 
Верх