9

我使用 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

4 回答 4

19

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

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

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

解决方案是更改 Root.php \ 第 623 行:

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

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

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

于 2012-10-08T14:57:28.180 回答
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

希望这对将来的某人有所帮助。

于 2013-12-20T14:23:55.867 回答
2

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

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

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

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

<...>\电子表格\Excel\Writer\Workbook.php

$this->_codepage = 0x04E4

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

<...>\电子表格\Excel\Writer\Format.php

$this->_font_charset = 0

更改值 - 0xCC(chrset ANSI Cyrillic)。

对于那些使用西里尔字母的人来说,这应该可以解决问题。我正要试试这个。

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

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

于 2010-04-20T13:56:25.693 回答
1

Spreadsheet_Excel_Writer 即将被 PEAR 弃用。我建议您尝试使用 phpexcel - http://phpexcel.codeplex.com/ - 代替。

于 2010-04-20T13:14:12.267 回答