Spreadsheet_Excel_Writer数据输出已损坏

时间:2010-04-20 11:04:58

标签: php excel pear xls

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

我不太确定如何形成xls文档:逐行或col by col ...此外,它显然不是字符串中的错误,因为当我删除一些数据时,错误出现了再进一步。

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

这里有一些必需品

$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 个答案:

答案 0 :(得分:18)

我遇到了同样的问题,我发现这个解决方案对我有用:

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

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

答案 1 :(得分:9)

我知道这是一个旧帖子,但我遇到了同样的问题并解决了它还原为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

希望这有助于将来。

答案 2 :(得分:2)

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

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

但是带有setVersion(8)的S_E_W生成了错误的BIFF8文件,如果输出超过一定的字节数,则会混淆我的所有xls。它无法在MS Office中打开,并在Oo ...中打开了损坏的数据。

我在网上找到的可能解决方案正在改变以下几行

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

$this->_codepage = 0x04E4

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

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

$this->_font_charset = 0

更改值на0xCC(chrset ANSI Cyrillic)。

对于那些使用西里尔字母的人来说应该这样做。我准备尝试一下。

而且,是的,这个库已经过时了。我将转移到http://phpexcel.codeplex.com/ 感谢您的建议

UPD:上面的解决方案似乎不起作用= \我没有找到网络补丁或解决方案的任何地方,并且最新版本(0.9.2)没有解决问题。所以我认为这仍然是一个BUG,永远不会被修复......

答案 3 :(得分:1)

PEAR即将弃用Spreadsheet_Excel_Writer。我建议你尝试使用phpexcel - http://phpexcel.codeplex.com/ - 而不是。