当前位置:  开发笔记 > 编程语言 > 正文

使用Spreadsheet_Excel_Writer创建Excel文件时出现奇怪错误

如何解决《使用Spreadsheet_Excel_Writer创建Excel文件时出现奇怪错误》经验,为你挑选了1个好方法。

这是代码.不是很多.

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.

甚至更奇怪的是,尽管有错误,文件看起来还不错.我碰巧写的任何数据都在那里.

关于如何摆脱这个错误的任何想法?


编辑

我修改了代码示例以更好地说明问题.我不认为第一个样本是合法的测试.



1> Mark Biek..:

问题中的代码有一个导致错误的错误.

该行将一堆列名写入第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();
?>

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有