编程语言
首页 > 编程语言> > php – 使用Spreadsheet_Excel_Writer创建Excel文件时出现奇怪错误

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