За последние 24 часа нас посетили 17454 программиста и 1721 робот. Сейчас ищут 1563 программиста ...

Экспорт массива в Excel

Тема в разделе "PHP и базы данных", создана пользователем mityaj, 25 апр 2012.

  1. mityaj

    mityaj Активный пользователь

    С нами с:
    25 апр 2012
    Сообщения:
    8
    Симпатии:
    0
    Вот такой способ, вроде все работает, если массив самому прописать, а если он генерируется - ошибка файла xls
    Что посоветутет?
    Код (Text):
    1. <?
    2. $hostname='localhost';
    3. $username='root';
    4. $password='';
    5.     $con = mysql_connect($hostname,$username,$password);
    6.         if (!$con)
    7.   {
    8.   die('Could not connect: ' . mysql_error());
    9.   }
    10. $dbname='db';
    11. mysql_select_db($dbname,$con);  
    12. $sql="SELECT * FROM patients";
    13. $result = mysql_query($sql);
    14.  
    15. // Внедрение PEAR::Spreadsheet_Excel_Writer
    16. require_once "Spreadsheet/Excel/Writer.php";
    17.  
    18. // Создание случая
    19. $xls =& new Spreadsheet_Excel_Writer();
    20.  
    21. // Отправка HTTP заголовков для сообщения обозревателю о типе вxодимыx //данныx  
    22. $xls->send("test.xls");
    23.  
    24. // Добавление листа к файлу, возвращение объекта для добавления данныx
    25. $sheet =& $xls->addWorksheet('Binary Count');
    26.  
    27. while ($row = mysql_fetch_assoc($result))
    28. {
    29.    // Использование функции PHP decbin()для преобразования целого числа в //бинарные данные
    30.       $sheet->writeCol(0,0,$row[0],$colHeadingFormat);
    31.       $sheet->writeCol(0,1,$row[1],$colHeadingFormat);
    32.       $sheet->writeCol(0,2,$row[2],$colHeadingFormat);
    33.       $sheet->writeCol(0,3,$row[3],$colHeadingFormat);
    34.       $sheet->writeCol(0,4,$row[4],$colHeadingFormat);
    35.       $sheet->writeCol(0,5,$row[5],$colHeadingFormat);
    36.       $sheet->writeCol(0,6,$row[6],$colHeadingFormat);
    37.       $sheet->writeCol(0,7,$row[7],$colHeadingFormat);
    38.       $sheet->writeCol(0,8,$row[8],$colHeadingFormat);
    39. }
    40.  // Определение некоторого форматирования
    41. $colHeadingFormat =& $xls->addFormat();
    42. $colHeadingFormat->setBold();
    43. $colHeadingFormat->setFontFamily('Helvetica');
    44. $colHeadingFormat->setBold();
    45. $colHeadingFormat->setSize('10');
    46. $colHeadingFormat->setAlign('center');
    47.  
    48. $xls->close();
    49. mysql_close($con);
    50. ?>
     
  2. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    Я в своем скрипте статистики использовал альтернативный способ, который нашел на хабре:

    Код (PHP):
    1. <?php
    2. function xlsBOF() {
    3.     echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);
    4.     return;
    5. }
    6.  
    7. function xlsEOF() {
    8.     echo pack("ss", 0x0A, 0x00);
    9.     return;
    10. }
    11.  
    12. function xlsWriteNumber($Row, $Col, $Value) {
    13.     echo pack("sssss", 0x203, 14, $Row, $Col, 0x0);
    14.     echo pack("d", $Value);
    15.     return;
    16. }
    17.  
    18. function xlsWriteLabel($Row, $Col, $Value ) {
    19.     $L = strlen($Value);
    20.     echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L);
    21.     echo $Value;
    22.     return;
    23. }
    24.  
    25.     //где-то тута создаем массив $array[$i][$j] или читаем из файла (из базы данных), после чего начинаем формировать excel-файл
    26.  
    27.     header("Content-Type: application/force-download");
    28.     header("Content-Type: application/octet-stream");
    29.     header("Content-Type: application/download");;
    30.     header("Content-Disposition: attachment;filename=list.xls");
    31.     header("Content-Transfer-Encoding: binary");
    32.  
    33.     xlsBOF(); //пишем начало файла
    34.  
    35.     for($i=0,$counti=count($array);$i<$counti;$i++){ //количество строк
    36.         for($j=0,$countj=count($array[$i]);$j<$countj;$j++){ //количество ячеек
    37.     
    38.             xlsWriteLabel($i,$j,$array[$i][$j]); 
    39.                         //в строку $i, в ячейку $j, записываем содержимое $array[$i][$j]
    40.  
    41.         }
    42.     }
    43.  
    44.     xlsEOF(); // закрываем файл
    45. ?>