Вывод данных электронной таблицы 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(); 
Author: dr3w, 2010-04-20

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 (бета-версия)

 18
Author: mabi, 2012-10-08 14:57:28

Я знаю, что это старый пост, но у меня была та же проблема, и я решил ее, вернувшись к 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

Надеюсь, это поможет кому-нибудь в будущем.

 9
Author: ZiP, 2013-12-20 14:23:55

Хорошо! Я нашел, в чем была проблема. Я не упомянул о том, что мне пришлось установить кодировку 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) не решает проблему. Поэтому я предполагаю, что это все еще ОШИБКА, которая никогда не будет исправлена...

 2
Author: dr3w, 2010-04-20 15:31:23

Spreadsheet_Excel_Writer близок к тому, чтобы быть отвергнутым PEAR. Я бы посоветовал вам попробовать использовать phpexcel - http://phpexcel.codeplex.com / - вместо этого.

 1
Author: kguest, 2010-04-20 13:14:12