php – 使用Spreadsheet_Excel_Writer创建Excel文件时出现奇怪错误
作者:互联网
这是代码.不是很多.
<?php
include("Spreadsheet/Excel/Writer.php");
$xls = new Spreadsheet_Excel_Writer();
$sheet = $xls->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文件中,即使技术上已被覆盖,您仍会看到带有列名的行.
我找到了解决方案here on Google Groups.向下滚动到底部.这是弥迦提到的最后一篇文章.
这是修复
<?php
include("Spreadsheet/Excel/Writer.php");
$xls = new Spreadsheet_Excel_Writer();
$rowNumber = 0;
$sheet = $xls->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();
?>
标签:php,pear,export-to-excel 来源: https://codeday.me/bug/20190717/1485844.html