我使用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();
答案 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/ - 而不是。