У кода в вопросе есть ошибка, которая вызывает ошибку.
Эта строка записывает набор имен столбцов в строку 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 . Прокрутите вниз до дна. Это последний пост Михей , в котором упоминается проблема.
А вот и исправление
<?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();
?>