Spreadsheet_Excel_Writer数据输出已损坏

我使用Spreadsheet_Excel_Writer来生成.xls文件,它工作正常,直到我必须处理大量的数据。 在某个阶段,它只是写一些无聊的字符,并退出填补某些列。 但是,有些列是字段到最后(通常是数字数据)

我不太清楚xls文档是如何形成的:一行一行,或者一列一列…另外它显然不是一个string中的错误,因为当我删除了一些数据时,错误出现了一点点。

我认为没有必要在我所有的代码

这里有一些必需品

$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(); 

我有同样的问题,我发现这个解决scheme适用于我:

http://pear.php.net/bugs/bug.php?id=19284&edit=3

[2012-08-08 17:12 UTC] identit(Vincent Dubourg)

解决方法是在Root.php \ line 623中更改:

 fwrite($FILE, pack("V", 1)); 

 fwrite($FILE, pack("V", $num_sb_blocks)); 

该文件是pear / OLE / PPS / Root.php包中的OLE 1.0.0RC2(beta)

我知道这是一个旧的post,但我有同样的问题,并解决了它恢复到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 

希望这有助于未来的人。

Spreadsheet_Excel_Writer接近被PEAR弃用。 我build议你尝试使用phpexcel – http://phpexcel.codeplex.com/ – 。

好! 我发现了什么问题。 我没有提到的是我必须将编码设置为UTF-8并输出具有西里尔字符集的俄文文本。 所以对我来说这些线是必要的

  $workbook->setVersion(8); ... $contents->setInputEncoding('UTF-8'); 

但是带有setVersion(8)的S_E_W生成了错误的BIFF8文件,如果输出超过了一定数量的字节,就会搞乱我所有的xls。 无法在MS Office中打开,并在OO中打开损坏的数据…

我在网上find的可能的解决scheme是改变以下几行

<…> \电子表格\ EXCEL \作家\ Workbook.php

 $this->_codepage = 0x04E4 

将值更改为0x04E3(Windows-1251的代码页)

<…> \电子表格\ EXCEL \作家\ Format.php

 $this->_font_charset = 0 

将值改为0xCC(chrset ANSI Cyrillic)。

那些使用西里尔字母的人应该这样做。 我即将试用这个。

而且,这个图书馆已经过时了。 我将转移到http://phpexcel.codeplex.com/感谢您的build&#x8BAE;

UPD:上面的解决scheme似乎没有工作= \而且我没有发现networking补丁或解决scheme的任何地方做的伎俩,最新版本(这是0.9.2)不能解决问题。 所以我认为这仍然是一个BUG,这永远不会被修复…