Что нового

[Баг] Ошибка в функции _ExcelReadSheetToArray из Excel.au3

Dreadfulangel

Знающий
Сообщения
19
Репутация
11
Ошибка в функции _ExcelReadSheetToArray из Excel.au3.
В документации написано:
Remarks: If the sheet is empty [0][0] and [0][1] both = 0.
На самом деле возвращает две 1, в чём можно убедиться на примере:

Код:
#include 	<Array.au3>
#include 	<Excel.au3>

$oExcel = ObjCreate("Excel.Application")
If Not IsObj($oExcel) Then
	MsgBox(16, "Error: _Exel_Paste", "Couldn't Create Object Excel.Application")
EndIf
$oExcel = $oExcel.WorkBooks.Add
$oExcel.Application.Visible = True
For $xlWindow In $oExcel.Windows
	$xlWindow.Visible = True
Next
$oExcel.Activate
$aLastCell=_ExcelReadSheetToArray($oExcel)
_ArrayDisplay($aLastCell, 'Excel')
$oExcel.Saved = True
$oExcel.Close


В UDF нашёл ошибку:

Код:
; Extract integer last row and col
$sLastCell = StringRegExp($sLastCell, "\A[^0-9]*(\d+)[^0-9]*(\d+)\Z", 3)
Local $iLastRow = $sLastCell[0]
Local $iLastColumn = $sLastCell[1]

; Return 0's if the sheet is blank
If $sLastCell = "R1C1" And $oExcel.Activesheet.Cells($iLastRow, $iLastColumn).Value = "" Then Return $avRET


$sLastCell не может уже быть равной "R1C1" после StringRegExp, т.к. это уже массив, следовательно весь If не работает.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 243
Репутация
2 345
Да, бага есть, нужно «$sLastCell = StringRegExp» заменить на «$aLastCell = StringRegExp», и там где оно используется как массив тоже заменить «s» на «a».

Нужно будет тикет написать...


Добавлено:
Сообщение автоматически объединено:

Тикет оказывается уже есть, и как раз тот самый который и внёс изменение в функцию, после чего эта бага появилась :smile:
Оставил там комментарий на эту тему.
 

vovsla

Осваивающий
Сообщения
546
Репутация
26
UDF исправил, скопипастил прям из комментария http://www.autoitscript.com/trac/autoit/ticket/850#comment:3
но почему-то вылезает сообщение, что $aLastCell не массив, прикрепил таблицу и собщение, только "table.doc" нужно переименовать в "table.xls", т.к. почему-то система не даёт прикреплять файлы xls
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 243
Репутация
2 345
Vovsla [?]
но почему-то вылезает сообщение
Пример?

"table.doc" нужно переименовать в "table.xls", т.к. почему-то система не даёт прикреплять файлы xls
А в архив не проще поместить? ;)


Добавлено:
Сообщение автоматически объединено:

Нужно указанный участок заменить теперь на это:

Код:
; Extract integer last row and col
	Local $aLastCell = StringRegExp($sLastCell, "\A(?:.*:)?[^0-9]*(\d+)[^0-9]*(\d+)\Z", 3)
	If @error Then Return SetError(4, 0, 0) ;should not happen
	
	Local $iLastRow = $aLastCell[0]
	Local $iLastColumn = $aLastCell[1]
	
	; Return 0's if the sheet is blank
	If $sLastCell = "R1C1" And $oExcel.Activesheet.Cells(1, 1).Value = "" Then Return $avRET


поправлен regexp и добавлена проверка на ошибочность. Добавил это и в тикет.
 
Верх