Что нового

[Баг] Ошибка в функции _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,671
Репутация
2,481
Да, бага есть, нужно «$sLastCell = StringRegExp» заменить на «$aLastCell = StringRegExp», и там где оно используется как массив тоже заменить «s» на «a».

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


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

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

vovsla

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
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 и добавлена проверка на ошибочность. Добавил это и в тикет.
 
Верх