Что нового

[Автоматизация] Реакция скрипта на ошибку

modnik

Знающий
Сообщения
138
Репутация
13
Добрый день!

Имеется скрипт
Код:
$i = 2
$oExcel = _ExcelBookOpen("d:\2.xls")
While $i < 300
$market = _ExcelReadCell($oExcel, 'L' & $i)
$oIE = _IECreate($market)
$oTable = _IETableGetCollection ($oIE, 1)
$aTableData = _IETableWriteToArray ($oTable, True)
_ExcelWriteCell($oExcel,$aTableData[1][0], 'M' & $i)
_ExcelWriteCell($oExcel,$aTableData[2][0], 'N' & $i)
_ExcelWriteCell($oExcel,$aTableData[3][0], 'O' & $i)
_ExcelWriteCell($oExcel,$aTableData[4][0], 'P' & $i)
_ExcelWriteCell($oExcel,$aTableData[5][0], 'Q' & $i)
_ExcelBookSave($oExcel)
_IEQuit($oIE)
$d = _ExcelReadCell($oExcel, 'R' & $i)
$oIE = _IECreate($d)
$str = _IEDocReadHTML($oIE)
$price = StringRegExp($str, '(?i)lowest_price\D*(\d+)\D+(\d+)', 2)
If @error Then Local $price[2] = ['', 'ошибка']
_ExcelWriteCell($oExcel,$price[1], 'S' & $i)
_IEQuit($oIE)
$i = $i +1
WEnd


Который работает отлично, но иногда бывает так что $aTableData = _IETableWriteToArray ($oTable, True) не срабатывает так как таблицы на данной странице нет. Как можно сделать так, чтобы в случае отсутствия таблицы скрипт просто выполнялся дальше а в ячейки добавлялись значения, например "ошибка"
 
A

Alofa

Гость
modnik, что решили не париться читать справку, рассматривать примеры, делать выводы?
Сразу в форум?
Код:
$i = 2
$oExcel = _ExcelBookOpen("d:\2.xls")
While $i < 300
$market = _ExcelReadCell($oExcel, 'L' & $i)
$oIE = _IECreate($market)
$oTable = _IETableGetCollection ($oIE, 1)
$aTableData = _IETableWriteToArray ($oTable, True)
If @error Then
;   Здесь пишите код, что вы хотите сделать при ошибке
Else
   _ExcelWriteCell($oExcel,$aTableData[1][0], 'M' & $i)
   _ExcelWriteCell($oExcel,$aTableData[2][0], 'N' & $i)
   _ExcelWriteCell($oExcel,$aTableData[3][0], 'O' & $i)
   _ExcelWriteCell($oExcel,$aTableData[4][0], 'P' & $i)
   _ExcelWriteCell($oExcel,$aTableData[5][0], 'Q' & $i)
EndIf
_ExcelBookSave($oExcel)
_IEQuit($oIE)
$d = _ExcelReadCell($oExcel, 'R' & $i)
$oIE = _IECreate($d)
$str = _IEDocReadHTML($oIE)
$price = StringRegExp($str, '(?i)lowest_price\D*(\d+)\D+(\d+)', 2)
If @error Then Local $price[2] = ['', 'ошибка']
_ExcelWriteCell($oExcel,$price[1], 'S' & $i)
_IEQuit($oIE)
$i = $i +1
WEnd
 
Автор
M

modnik

Знающий
Сообщения
138
Репутация
13
Спасибо помогло. Однако столкнулся с ещё одной ошибкой. Иногда бывает, что массив $aTableData = _IETableWriteToArray ($oTable, True) состоит не из 5 а меньше ячеек. Я вставил по образу, но не срабатывает

Код:
$aTableData = _IETableWriteToArray ($oTable, True)
if @error Then
_ExcelWriteCell($oExcel,"ошибка", 'M' & $i)
_ExcelWriteCell($oExcel,"ошибка", 'N' & $i)
_ExcelWriteCell($oExcel,"ошибка", 'O' & $i)
_ExcelWriteCell($oExcel,"ошибка", 'P' & $i)
_ExcelWriteCell($oExcel,"ошибка", 'Q' & $i)
Else
_ExcelWriteCell($oExcel,$aTableData[1][0], 'M' & $i)
if @error Then _ExcelWriteCell($oExcel,"ошибка", 'M' & $i)
_ExcelWriteCell($oExcel,$aTableData[2][0], 'N' & $i)
if @error Then _ExcelWriteCell($oExcel,"ошибка", 'N' & $i)
_ExcelWriteCell($oExcel,$aTableData[3][0], 'O' & $i)
if @error Then _ExcelWriteCell($oExcel,"ошибка", 'O' & $i)
_ExcelWriteCell($oExcel,$aTableData[4][0], 'P' & $i)
if @error Then _ExcelWriteCell($oExcel,"ошибка", 'P' & $i)
_ExcelWriteCell($oExcel,$aTableData[5][0], 'Q' & $i)
if @error Then _ExcelWriteCell($oExcel,"ошибка", 'Q' & $i)
EndIf


выдаёт ошибку

Код:
"C:\cODE\1.au3" (209) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
_ExcelWriteCell($oExcel,$aTableData[5][0], 'Q' & $i)
_ExcelWriteCell($oExcel,^ ERROR
 

Dm666

Осваивающий
Сообщения
221
Репутация
48
Можно так попробовать
Код:
$aTableData = _IETableWriteToArray($oTable, True)
If @error Then
	_ExcelWriteCell($oExcel, "ошибка", 'M' & $i)
	_ExcelWriteCell($oExcel, "ошибка", 'N' & $i)
	_ExcelWriteCell($oExcel, "ошибка", 'O' & $i)
	_ExcelWriteCell($oExcel, "ошибка", 'P' & $i)
	_ExcelWriteCell($oExcel, "ошибка", 'Q' & $i)
Else
	For $j = 1 To UBound($aTableData) -1
		Switch $j
			Case 1
				$Column = 'M'
			Case 2
				$Column = 'N'				
			Case 3
				$Column = 'O'				
			Case 4
				$Column = 'P'				
			Case 5
				$Column = 'Q'		
		EndSwitch
		_ExcelWriteCell($oExcel, $aTableData[$j][0], $Column & $i)
	Next
EndIf
 
Верх