Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 电子表格\u Excel\u书写器数据输出损坏_Php_Excel_Pear_Xls - Fatal编程技术网

Php 电子表格\u Excel\u书写器数据输出损坏

Php 电子表格\u Excel\u书写器数据输出损坏,php,excel,pear,xls,Php,Excel,Pear,Xls,我使用电子表格\u Excel\u Writer生成.xls文件,在我必须处理大量数据之前,它工作正常。在某个阶段,它只是在某些栏目里写些废话。但是,有些列的字段一直到最后(通常是数字数据) 我不太清楚xls文档是如何形成的:一行一行,还是一列一列。。。而且,这显然不是字符串中的错误,因为当我剪切一些数据时,错误会显示得更远一些 我认为我所有的代码都没有必要 这里有一些必需品 $filename = 'file.xls'; $workbook = & new Spreadsheet_Ex

我使用电子表格\u Excel\u 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(); 

电子表格(Excel)(Writer)几乎被PEAR否决。我建议您尝试使用phpexcel--而不是。

好的!我发现了问题所在。我没有提到的是,我必须将编码设置为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西里尔字母)

对于那些使用西里尔字母的人来说,这应该是个好办法。我要试试这个

是的,这个图书馆已经过时了。我将转到 谢谢你的建议


UPD:上述解决方案似乎不起作用=\而且我在web修补程序或解决方案中找不到任何地方可以解决这个问题,最新版本(0.9.2)也不能解决这个问题。所以我认为这仍然是一个BUG,永远不会被修复…

我也有同样的问题,我找到了适合我的解决方案:

[2012-08-08 17:12 UTC]identit(文森特·杜堡)

解决方案是Root.php 623中的更改:

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


文件名为pear/OLE/PPS/Root.php,位于OLE 1.0.0RC2(beta)包中。

我知道这是一篇旧文章,但我遇到了同样的问题,并通过恢复到电子表格\u Excel\u 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

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

(可选)您能接受mabi的答案作为“正确答案”吗?它确实解决了问题,这将为其他人省去很多麻烦。为什么生成的文件是只读的?是否可以设置任何选项来避免这种情况?…但请检查PHP是否启用了zip扩展。请注意,PHPExcel需要大量内存…我开始使用PHPExcel,但随后我的脚本必须生成的数据量增加,2Gb的RAM不再足够。电子表格Excel Writer速度更快,占用内存更少,所以如果您计划使用PHPExcel,请记住这一点是的,这很有帮助!非常感谢。到目前为止,这是最简单的解决方案。还修复了0.9.3 Excel Writer版本中的另一个错误,该版本会抛出一个“通过引用传递呼叫时间”的问题big big thansk以获取您的答案
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