这是代码.不是很多.
addWorksheet('At a Glance'); $colNames = array('Foo', 'Bar'); $sheet->writeRow(0, 0, $colNames, $colHeadingFormat); for($i=1; $i<=10; $i++) { $row = array( "foo $i", "bar $i"); $sheet->writeRow($rowNumber++, 0, $row); } header ("Expires: " . gmdate("D,d M Y H:i:s") . " GMT"); header ("Last-Modified: " . gmdate("D,d M Y H:i:s") . " GMT"); header ("Cache-Control: no-cache, must-revalidate"); header ("Pragma: no-cache"); $xls->send("test.xls"); $xls->close(); ?>
问题是当我用Excel实际打开文件时出现以下错误:
File error: data may have been lost.
甚至更奇怪的是,尽管有错误,文件看起来还不错.我碰巧写的任何数据都在那里.
关于如何摆脱这个错误的任何想法?
我修改了代码示例以更好地说明问题.我不认为第一个样本是合法的测试.
问题中的代码有一个导致错误的错误.
该行将一堆列名写入第0行
$sheet->writeRow(0, 0, $colNames, $colHeadingFormat);
然后我们有一个循环,它应该写出值行.
for($i=1; $i<=10; $i++) { $row = array( "foo $i", "bar $i"); $sheet->writeRow($rowNumber++, 0, $row); }
问题是$ rowNumber没有在任何地方声明,所以它在第一次通过循环时覆盖了第0行.
这种覆盖似乎导致Excel Writer出现问题.
奇怪的是,在提供错误的Excel文件中,即使技术上已被覆盖,您仍会看到带有列名的行.
我在Google网上论坛找到了解决方案.向下滚动到底部.这是弥迦提到的最后一篇文章.
这是修复
addWorksheet('At a Glance'); $colNames = array('Foo', 'Bar'); $sheet->writeRow($rowNumber, 0, $colNames, $colHeadingFormat); for($i=1; $i<=10; $i++) { $rowNumber++; $row = array( "foo $i", "bar $i"); $sheet->writeRow($rowNumber, 0, $row); } header ("Expires: " . gmdate("D,d M Y H:i:s") . " GMT"); header ("Last-Modified: " . gmdate("D,d M Y H:i:s") . " GMT"); header ("Cache-Control: no-cache, must-revalidate"); header ("Pragma: no-cache"); $xls->send("test.xls"); $xls->close(); ?>