Вот такой способ, вроде все работает, если массив самому прописать, а если он генерируется - ошибка файла xls Что посоветутет? Код (Text): <? $hostname='localhost'; $username='root'; $password=''; $con = mysql_connect($hostname,$username,$password); if (!$con) { die('Could not connect: ' . mysql_error()); } $dbname='db'; mysql_select_db($dbname,$con); $sql="SELECT * FROM patients"; $result = mysql_query($sql); // Внедрение PEAR::Spreadsheet_Excel_Writer require_once "Spreadsheet/Excel/Writer.php"; // Создание случая $xls =& new Spreadsheet_Excel_Writer(); // Отправка HTTP заголовков для сообщения обозревателю о типе вxодимыx //данныx $xls->send("test.xls"); // Добавление листа к файлу, возвращение объекта для добавления данныx $sheet =& $xls->addWorksheet('Binary Count'); while ($row = mysql_fetch_assoc($result)) { // Использование функции PHP decbin()для преобразования целого числа в //бинарные данные $sheet->writeCol(0,0,$row[0],$colHeadingFormat); $sheet->writeCol(0,1,$row[1],$colHeadingFormat); $sheet->writeCol(0,2,$row[2],$colHeadingFormat); $sheet->writeCol(0,3,$row[3],$colHeadingFormat); $sheet->writeCol(0,4,$row[4],$colHeadingFormat); $sheet->writeCol(0,5,$row[5],$colHeadingFormat); $sheet->writeCol(0,6,$row[6],$colHeadingFormat); $sheet->writeCol(0,7,$row[7],$colHeadingFormat); $sheet->writeCol(0,8,$row[8],$colHeadingFormat); } // Определение некоторого форматирования $colHeadingFormat =& $xls->addFormat(); $colHeadingFormat->setBold(); $colHeadingFormat->setFontFamily('Helvetica'); $colHeadingFormat->setBold(); $colHeadingFormat->setSize('10'); $colHeadingFormat->setAlign('center'); $xls->close(); mysql_close($con); ?>
Я в своем скрипте статистики использовал альтернативный способ, который нашел на хабре: Код (PHP): <?php function xlsBOF() { echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0); return; } function xlsEOF() { echo pack("ss", 0x0A, 0x00); return; } function xlsWriteNumber($Row, $Col, $Value) { echo pack("sssss", 0x203, 14, $Row, $Col, 0x0); echo pack("d", $Value); return; } function xlsWriteLabel($Row, $Col, $Value ) { $L = strlen($Value); echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L); echo $Value; return; } //где-то тута создаем массив $array[$i][$j] или читаем из файла (из базы данных), после чего начинаем формировать excel-файл header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download");; header("Content-Disposition: attachment;filename=list.xls"); header("Content-Transfer-Encoding: binary"); xlsBOF(); //пишем начало файла for($i=0,$counti=count($array);$i<$counti;$i++){ //количество строк for($j=0,$countj=count($array[$i]);$j<$countj;$j++){ //количество ячеек xlsWriteLabel($i,$j,$array[$i][$j]); //в строку $i, в ячейку $j, записываем содержимое $array[$i][$j] } } xlsEOF(); // закрываем файл ?>