Что нового

Длинная строка в ячейке Excel. Ограничение длины строки _Excel_RangeRead

swan

Новичок
Сообщения
2
Репутация
0
Доброго времени суток, All

Имеется экселевский файл из которого считываю данные.
Одна из ячеек содержит длинную строку, это текст объявления.
Столкнулся с ограничением длины возвращаемой строки в функции _Excel_RangeRead.
Работает нормально, если строка не длиннее 255 символов.

Можно ли как-то обойти это ограничение ?
Может есть какой-то другой способ прочитать одну длинную ячейку ?

Ниже код, а во вложении заархивированный файл.
Код:
#include <Excel.au3>

$sWorkbook = "F:\1.xlsx"
$oExcel = _Excel_Open()
$oWorkbook = _Excel_BookOpen($oExcel, $sWorkbook)
$oWorkbook = _Excel_BookAttach($sWorkbook)

$read=_Excel_RangeRead($oWorkbook, 'лист1', 'A1:A1')
MsgBox(64, 'Info', 'StringLen=' & StringLen($read) & $read )

$read=_Excel_RangeRead($oWorkbook, 'лист1', 'A2:A2')
MsgBox(64, 'Info', 'StringLen=' & StringLen($read) & $read )

$read=_Excel_RangeRead($oWorkbook, 'лист1', 'A3:A3')
MsgBox(64, 'Info', 'StringLen=' & StringLen($read) & $read )

$read=_Excel_RangeRead($oWorkbook, 'лист1', 'A4:A4')
MsgBox(64, 'Info', 'StringLen=' & StringLen($read) & $read )
 

Вложения

  • 1.zip
    6.4 КБ · Просмотры: 2

pvnn

Осваивающий
Сообщения
305
Репутация
32
swan, в функции _Excel_RangeRead установите параметр $bForceFunc=True


Код:
#include <Excel.au3>

$sWorkbook = @ScriptDir&"\1.xlsx"
$oExcel = _Excel_Open()
$oWorkbook = _Excel_BookOpen($oExcel, $sWorkbook)
$oWorkbook = _Excel_BookAttach($sWorkbook)

; Считать ячейку - результат строка
 $Str=_Excel_RangeRead($oWorkbook,Default,'A4',1,True)
 MsgBox(64,'Количество символов = '&StringLen($Str),$Str)

; Считать все данные Excel в массив
$aArray=_Excel_RangeRead($oWorkbook,Default,Default,1,True)
_ArrayDisplay($aArray,'Считать все данные Excel в массив')

; Считать диапазон ячеек
 $aArray=_Excel_RangeRead($oWorkbook,Default,'A3:A4',1,True)
 _ArrayDisplay($aArray,'Считать диапазон ячеек A3:A4')

 ; Считать целиком колонку 1
 $aArray=_Excel_RangeRead($oWorkbook,Default,$oWorkbook.ActiveSheet.Usedrange.Columns(1),1,True)
 _ArrayDisplay($aArray,'Считать целиком колонку 1')
 
Автор
S

swan

Новичок
Сообщения
2
Репутация
0
Работает!
Спасибо большое. Всё-таки документацию нужно читать внимательно, там как раз написано про этот случай.

Код:
#include <Excel.au3>

$sWorkbook = "F:\1.xlsx"
$oExcel = _Excel_Open()
$oWorkbook = _Excel_BookOpen($oExcel, $sWorkbook)
$oWorkbook = _Excel_BookAttach($sWorkbook)

$read=_Excel_RangeRead($oWorkbook, 'лист1', 'A1:A1',1,True)
MsgBox(64, 'Info', 'StringLen=' & StringLen($read) & $read )

$read=_Excel_RangeRead($oWorkbook, 'лист1', 'A2:A2',1,True)
MsgBox(64, 'Info', 'StringLen=' & StringLen($read) & $read )

$read=_Excel_RangeRead($oWorkbook, 'лист1', 'A3:A3',1,True)
MsgBox(64, 'Info', 'StringLen=' & StringLen($read) & $read )

$read=_Excel_RangeRead($oWorkbook, 'лист1', 'A4:A4',1,True)
MsgBox(64, 'Info', 'StringLen=' & StringLen($read) & $read )
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Если документ большой и Вам нужно работать не с одним столбцом, то быстрее считать весь документ (или диапазон столбцов ) сразу в массив и дальше работать с массивом. В Вашем примере строка "$oWorkbook = _Excel_BookAttach($sWorkbook)" лишняя, её можно удалить . Так можно прочитать весь документ в скрытом режиме:
Код:
#include <Excel.au3>
#include <Array.au3>

$sWorkbook = @ScriptDir&"\1.xlsx"
$oExcel = _Excel_Open(False)
$oWorkbook = _Excel_BookOpen($oExcel, $sWorkbook)
$read=_Excel_RangeRead($oWorkbook, 'Лист1',Default,Default,True)
_Excel_BookClose($oWorkbook)
_Excel_Close($oExcel)

_ArrayDisplay($read)
 
  • Like
Реакции: Norm
Верх