Что нового

Работа с большими массивами из Excel

ini

Новичок
Сообщения
55
Репутация
0
Здравствуйте уважаемые форумчане, есть задача, считать с книги Excel большое количество данных, около 10 тысяч строк (бывает больше) в 1-м столбце, если количество значений около 5000 строк, все работает хорошо, но если значений больше, AutoIt :IL_AutoIt_1: теряет объект Excel:
Код:
"C:\Program Files\AutoIt3\Include\Excel_Old.au3" (722) : ==> The requested action with this object has failed.:
Return $oExcel.Activesheet.Cells($sRangeOrRow, $iColumn).Value
Return $oExcel.Activesheet^ ERROR

Кто нибудь сталкивался с данной проблемой и как её обойти?
Пробовал вписывать в массив сразу весь лист и циклом построчно, все равно выдаёт ошибку :scratch:
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Используйте новую UDF "Excel.au3" функцию
Код:
_Excel_RangeRead()
я читал и 60тыс. значений - работает в разы быстрее , чем со старой UDF. Пробуйте вариант со значением параметра "$bForceFunc=True"
 
Автор
I

ini

Новичок
Сообщения
55
Репутация
0
Спасибо, считал данные, а с этой функцией можно создавать только одномерный массив?

Нужен двумерный, буду до вносить данные и вставлять двумерный массив в excel
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Создаётся двумерный массив, такой-же , как и Ваша таблица в Excel
Создавайте/правьте считанный массив (двумерный) и записывайте его в Excel функцией
Код:
_Excel_RangeWrite()
 
Автор
I

ini

Новичок
Сообщения
55
Репутация
0
Массив к сожалению одномерный получается, у меня следующий столбец с данными, которые в массиве не нужны, но все равно спасибо :ok:

P.S. Еще странно, что диапазон ячеек только через Range можно задавать, мне например удобнее указывать Cells, ну да ладно, допишу сам функцию.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Массив к сожалению одномерный получается
Не указывайте никаких диапазонов,для чтения в массив всей таблицы просто так:
Код:
#include <Array.au3>
#include <Excel.au3>

;Здесь путь к Вашему файлу
Local $sPath = @ScriptDir & "\MyExcel.xlsx"
Local $oExcel = _Excel_Open(False)
Local $oWorkbook = _Excel_BookOpen($oExcel, $sPath)
Local $aResult = _Excel_RangeRead($oWorkbook)
_Excel_Close($oExcel)
_ArrayDisplay($aResult)
 
Верх