Размер файла Excel Writer

S@fer

Новичок
Размер файла Excel Writer

Здраствуйте.
Использую для создания *.xls Spreadsheet Excel Writer.
Возникла проблема с размером файлов:
Если размер файла <21 Kb (около 80 строк), то файл нормально открывается и читается,
а если файл превышает 21 Kb, то при открытие через Excel он выдает ошибку типа:
"В файле bla-bla.xls были обнаружены ошибки, но MS Office Excel удалось открыть файл.
Файл поврежден на столько серьезно, что некоторые данные утеряны".
И теряется часть последних записей.
Вот код создания файла:
PHP:
if (array_key_exists('Basketelement', $basket) && count($basket['Basketelement'])) { 
                     vendor('excel_writer/ExcelWriter'); 
                     vendor('ole/OleRoot'); 
                     vendor('ole/OleFile');  
                     $order =  sprintf("%06s", $user['User']['id']).'_'.strftime('%d%m%y%H%M'); 
                     $name = TMP.'export/'.$order.'.xls'; 
                     $xls =& new ExcelWriter($name); 
                     $xls->setVersion(8); 
                     $this->log("send: name=$name"); 
                     $sheet = $xls->addWorksheet();  
                     $sheet->setInputEncoding('UTF-8');  
                     for ($i = 0; $i < count($basket['Basketelement']); $i++) { 
                        $elem = $basket['Basketelement'][$i]; 
                   
                        $sheet->writeString($i, 0, substr($elem['Presence']['oe'],1)); 
                        $sheet->writeNumber($i, 1, $elem['number']); 
                        $sheet->writeString($i, 2, 'usd'); 
                        $sheet->writeString($i, 3, 'WWW'); 
                        $sheet->writeString($i, 4, $elem['Presence']['description'].' '.$elem['Presence']['place'].' '.$elem['Presence']['brand'].' '.substr($elem['Presence']['oe'],1)); 
                        $sheet->writeNumber($i, 5, $elem['Presence']['price']); 
                        $sheet->writeNumber($i, 6, $elem['Presence']['price']); 
                     } 
                     $xls->close(); 
}
Где может находится ошибка? Спасибо.
 

x-yuri

Новичок
а если в файл записывать?
и какой ты Spreadsheet Excel Writer используешь?
 

S@fer

Новичок
какой ты Spreadsheet Excel Writer используешь?
PEAR:: Spreadsheet_Excel_Writer 0.9.1
а если в файл записывать?
так же пишет ошибку при открытии

Причем теряются значения в 5-ом и 1-ом столбце
$sheet->writeString($i, 0, substr($elem['Presence']['oe'],1));
$sheet->writeString($i, 4, $elem['Presence']['description'].' '.$elem['Presence']['place'].' '.$elem['Presence']['brand'].' '.substr($elem['Presence']['oe'],1));
 

x-yuri

Новичок
PEAR:: Spreadsheet_Excel_Writer 0.9.1
а ты что переименовал Spreadsheet_Excel_Writer -> ExcelWriter (или я чего-то не знаю)

Причем теряются значения в 5-ом и 1-ом столбце
а если записывать в них что-нибудь из того, что в другие столбцы пишется?
 

S@fer

Новичок
а ты что переименовал Spreadsheet_Excel_Writer -> ExcelWriter
Нет не переименовывал скрипт скачан от сюда
http://pear.php.net/package/Spreadsheet_Excel_Writer/download

Вообще это используется в интернет магазине автозапчастей. Когда клиент отправлет заказ, создается екселовский файлик (сохраняется на FTP) и отправляется на почту администратору.
в
writeString($i, 0, substr($elem['Presence']['oe'],1))
записывается номер детали,
в
writeString($i, 4, $elem['Presence']['description'].' '.$elem['Presence']['place'].' '.$elem['Presence']['brand'].' '.substr($elem['Presence']['oe'],1));
описание этой детали.
т.е.описание может быть разное. и файл может содержать более 100 строк, а размер его будет <20 kb.
Но если размер файла начинает превышать 20 kb, то файл создается с ошибкой.
 

Serguitar

Новичок->продвинутый
У меня Spreadsheet_Excel_Writer преспокойно генерит эксель отчеты с 10-15 страницами по >200 строк в каждом, и нигде ничего не отваливается, так что врядли дело в либе.
Возможно при записи writeNumber воспринимает передаваемое значение не как число.
Попробуй явно указать
$sheet->writeNumber($i, 1, (int)$elem['number']);
или записать как строку, чтобы понять, в типе ли причина.
 

DiMA

php.spb.ru
Команда форума
никаких проблем с количеством строк нет (ну, до 64к)
зато есть проблема с длиной ячейки - не более 255 символов, библиотека не способна писать больше
поэтому переходим на csv
 

Serguitar

Новичок->продвинутый
зато есть проблема с длиной ячейки - не более 255 символов, библиотека не способна писать больше
Ну, в его конкретном случае в ячейку судя по всему пишется номер товара и цена, так что там едва ли больше 255 символов.
 

S@fer

Новичок
да, размер текста в ячейке не превышает 150 символов.
Пробовал создавать файлы с разным количеством товаров, с разными товарами. и каждый раз если размер файла превышал 20 кб., то он открывался с ошибкой. Потеря данных проходила в разных строках (то в 86, то 93 и т.п.), т.е. ни как с количеством строк это не связано.
Попробовал открыть через Ворд с помощью "преобразования файла"-->"Восстановление текста из любого файла". То потерянные данные там отоброжаются. Но востанавливать их копипастом не совсем удобно.
 

DiMA

php.spb.ru
Команда форума
да, я знаю, что название детали не предывает даже 100 символов... однако, библиотеки Пира по чтению и записи Экселя - крайне кривые.

Кстати, кому нужно взломать базы запчастей и выложить в инет (на подобии exist.ru elcats.ru japancats.ru) - обращайтесь.
 

x-yuri

Новичок
Но если размер файла начинает превышать 20 kb, то файл создается с ошибкой
а если только пустые ячейки создавать или с какими-нибудь единицами или чем-то подобным?

-~{}~ 10.02.09 16:41:

или если попробовать в другой кодировке
 

ZmeY

Новичок
добрый день!

есть ли новости по этому вопросу?

у меня такая же проблема, отловить причину не удается
 
Сверху