Вывод данных электронной таблицы Excel Writer поврежден
Я использую Spreadsheet_Excel_Writer для создания файла .xls, и он отлично работает, пока мне не придется иметь дело с большим объемом данных. На определенном этапе он просто пишет какие-то бессмысленные символы и прекращает заполнять определенные столбцы. Однако некоторые столбцы заполняются до конца (обычно числовые данные)
Я не совсем уверен, как формируется документ xls: строка за строкой или столбец за столбцом... Также очевидно, что это не ошибка в строке, потому что, когда я вырезаю некоторые данные, ошибка появляется немного дальнейший.
Я думаю, что во всем моем коде нет необходимости
Вот некоторые основные моменты
$filename = 'file.xls';
$workbook = & new Spreadsheet_Excel_Writer();
$workbook->setVersion(8);
$contents =& $workbook->addWorksheet('Logistics');
$contents->setInputEncoding('UTF-8');
$workbook->send($filename);
//here is the part where I write data down
$contents->write(0, 0, 'Field A');
$contents->write(0, 1, 'Field B');
$contents->write(0, 2, 'Field C');
$ROW=1;
foreach($ordersArr as $key=>$val){
$contents->write($ROW, 0, $val['a']);
$contents->write($ROW, 1, $val['b']);
$contents->write($ROW, 2, $val['c']);
$ROW++;
}
$workbook->close();
4 answers
У меня была та же проблема, я нашел это решение, которое работает для меня:
Http://pear.php.net/bugs/bug.php?id=19284&edit=3
[2012-08-08 17:12 UTC] идентификация (Винсент Дюбур)
Решение заключается в изменении Root.php \строка 623:
fwrite($FILE, pack("V", 1));
До
fwrite($FILE, pack("V", $num_sb_blocks));
Файл является pear/OLE/PPS/Root.php в пакете OLE 1.0.0RC2 (бета-версия)
Я знаю, что это старый пост, но у меня была та же проблема, и я решил ее, вернувшись к Spreadsheet_Excel_Writer 0.9.2 и OLE-1.0.0RC1.
pear uninstall Spreadsheet_Excel_Writer-0.9.3
pear uninstall OLE-1.0.0RC2
pear install OLE-1.0.0RC1
pear install Spreadsheet_Excel_Writer-0.9.2
Надеюсь, это поможет кому-нибудь в будущем.
Хорошо! Я нашел, в чем была проблема. Я не упомянул о том, что мне пришлось установить кодировку UTF-8 и вывести русский текст с кириллической кодировкой. Так что для меня эти строки были необходимы
$workbook->setVersion(8);
...
$contents->setInputEncoding('UTF-8');
Но S_E_W с помощью setVersion(8) сгенерировал плохой файл BIFF8, который испортил все мои xls, если вывод превысил определенное количество байтов. Его не удалось открыть в MS Office, и он был открыт с поврежденными данными в Oo...
Возможное решение, которое я нашел в Интернете, заключается в изменении следующие строки
<...>\Spreadsheet\Excel\Writer\Workbook.php
$this->_codepage = 0x04E4
Измените значение на 0x04E3 (кодовая страница для Windows-1251)
<...>\Spreadsheet\Excel\Writer\Format.php
$this->_font_charset = 0
Измените значение на 0xCC (набор символов ANSI на кириллице).
Это должно подействовать на тех, кто использует кириллицу. Я собираюсь попробовать это.
И, да, эта библиотека НАСТОЛЬКО устарела. Я буду переведен в http://phpexcel.codeplex.com / Спасибо за совет
UPD: Решение, приведенное выше, похоже, не работает =\ И я нигде не нашел в Интернете исправления или решения, которое бы помогло, и последняя версия (0.9.2) не решает проблему. Поэтому я предполагаю, что это все еще ОШИБКА, которая никогда не будет исправлена...
Spreadsheet_Excel_Writer близок к тому, чтобы быть отвергнутым PEAR. Я бы посоветовал вам попробовать использовать phpexcel - http://phpexcel.codeplex.com / - вместо этого.