2010-04-20 59 views
8

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

我不太清楚xls文档是如何形成的:逐行排列,还是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(); 
+0

你的数据集有多大? – richsage 2010-04-20 11:32:05

+0

*(备选)* http://phpexcel.codeplex.com/ – Gordon 2010-04-20 11:52:22

+0

您能接受作为“正确答案”的mabi的答案是否真的解决了问题,这将为其他人节省很多头痛。 – Sych 2014-11-07 22:23:22

回答

17

我有同样的问题,我发现这个解决方案,它为我的作品:

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

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

解决方法是在Root中进行更改。PHP \线623:

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

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

该文件梨/ OLE/PPS/Root.php封装OLE 1.0.0RC2(测试版)

+0

感谢您的信息。 +1 – Memochipan 2013-05-03 20:01:07

+0

为您的答案的大大thansk – 2015-04-14 16:16:20

1

Spreadsheet_Excel_Writer接近由PEAR被弃用。我建议你尝试使用phpexcel - http://phpexcel.codeplex.com/ - 代替。

+2

...但请检查PHP是否启用了zip扩展。并且请注意,PHPExcel需要大量内存...... – herrjeh42 2013-02-18 14:21:35

+1

我开始使用PHPExcel,但后来我的脚本产生的数据量增加了,而2Gb的内存已经不够了。 Spreadsheet_Excel_Writer速度更快,内存消耗更少,因此如果您打算使用PHPExcel,请牢记 – 2013-02-25 15:46:52

2

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

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

但S_E_W与setVersion(8)产生不良BIFF8文件时,搞砸了我所有的xls如果输出超过一定量的字节。它不能在微软Office中打开,并与吴损坏的数据...打开

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

< ...> \电子表格\ 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,这将永远无法修复......

+2

在更新到版本0.9.3后,它可以正常工作! – nightcoder 2012-08-21 22:52:28

8

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

希望这可以帮助未来的人。

+0

是的,它帮助!谢谢! – 2014-02-07 09:11:19

+0

迄今为止最简单的解决方案。还修复了0.9.3 Excel Writer版本引发的另一个bug,该版本引发了“引用时间通过引用”问题 – a2ron44 2015-10-20 21:31:27