Автор Тема: [Баг] Ошибка в функции _ExcelReadSheetToArray из Excel.au3  (Прочитано 4400 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Dreadfulangel [?]

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

Код: AutoIt [Выделить]
#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 нашёл ошибку:

Код: AutoIt [Выделить]
; 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 не работает.

Русское сообщество AutoIt

[Баг] Ошибка в функции _ExcelReadSheetToArray из Excel.au3
« Отправлен: Март 03, 2010, 18:39:14 »

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 8075
  • Репутация: 2313
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.14.0
Да, бага есть, нужно «$sLastCell = StringRegExp» заменить на «$aLastCell = StringRegExp», и там где оно используется как массив тоже заменить «s» на «a».

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


Добавлено: Март 04, 2010, 00:35:17
Тикет оказывается уже есть, и как раз тот самый который и внёс изменение в функцию, после чего эта бага появилась :)
Оставил там комментарий на эту тему.
« Последнее редактирование: Март 04, 2010, 00:35:34 от CreatoR, Причина: Объединение сообщений »


Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Оффлайн Vovsla [?]

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

Русское сообщество AutoIt

Re: [Баг] Ошибка в функции _ExcelReadSheetToArray из Excel.au3
« Ответ #2 Отправлен: Март 11, 2010, 21:54:58 »

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 8075
  • Репутация: 2313
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.14.0
Vovsla  [?]
Цитировать
UDF исправил
Цитировать
но почему-то вылезает сообщение
Пример?

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


Добавлено: Март 11, 2010, 23:53:31
Нужно указанный участок заменить теперь на это:

Код: AutoIt [Выделить]
    ; 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 и добавлена проверка на ошибочность. Добавил это и в тикет.
« Последнее редактирование: Март 11, 2010, 23:53:31 от CreatoR, Причина: Объединение сообщений »

Оффлайн Vovsla [?]

  • Осваивающий
  • **
  • Сообщений: 546
  • Репутация: 26
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
во, заработало

Русское сообщество AutoIt

Re: [Баг] Ошибка в функции _ExcelReadSheetToArray из Excel.au3
« Ответ #4 Отправлен: Март 12, 2010, 23:19:56 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
9 Ответов
5618 Просмотров
Последний ответ Сентябрь 17, 2010, 01:11:10
от damien2008
3 Ответов
3292 Просмотров
Последний ответ Октябрь 03, 2010, 12:23:34
от axlwor
2 Ответов
9242 Просмотров
Последний ответ Февраль 21, 2011, 13:55:54
от frazier1979
0 Ответов
3635 Просмотров
Последний ответ Февраль 21, 2011, 14:08:18
от `p r o x y
5 Ответов
4585 Просмотров
Последний ответ Апрель 16, 2012, 10:33:10
от Talany
4 Ответов
2932 Просмотров
Последний ответ Июнь 27, 2013, 23:22:46
от PACHOM
2 Ответов
1387 Просмотров
Последний ответ Апрель 01, 2014, 00:28:18
от Vovsla
1 Ответов
6166 Просмотров
Последний ответ Июнь 18, 2015, 11:12:32
от Yashied
2 Ответов
1654 Просмотров
Последний ответ Сентябрь 01, 2015, 08:04:54
от ildar
2 Ответов
1710 Просмотров
Последний ответ Январь 28, 2017, 20:50:26
от ason