За последние 24 часа нас посетили 18784 программиста и 1612 роботов. Сейчас ищут 995 программистов ...

отчет.xls!!!

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

  1. rodion4657

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

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    хочу сформировать отчет файл .xls пишет вот что
    вот сам index_excel.php
    Код (Text):
    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    2. <?php
    3. //$fecha=date('d_m_Y');
    4.  
    5. require_once("class.php");
    6. header('Content-Type: application/vnd.ms-excel');
    7. header('Content-Disposition: attachment; filename="report.xls"');
    8. //header("Content-Type: application/force-download");
    9.    // header("Content-Type: application/octet-stream");
    10.    // header("Content-Type: application/download");
    11.  
    12. //header('Cache-Control: max-age=0');
    13. //$writer = PHPExcel_IOFactory::createWriter($xls, 'Excel5');
    14. //$writer->save('php://output');
    15. //exit;
    16. //header("Content-Transfer-Encoding: binary ");
    17. $alumnos = new Alumno();
    18. $reg_alumnos=$alumnos->listarTodos();
    19. ?>
    20.  
    21. <html>
    22. <head>
    23. <title>Untitled</title>
    24. </head>
    25. <body>
    26. <table border="1">
    27.     <thead>
    28.             <tr>
    29.                 <th width="20">id</th>
    30.                 <th width="200">name</th>
    31.                 <th width="200">old</th>
    32.                 <th width="200">ves</th>
    33.                 <th width="200">date</th>
    34.                 </tr>
    35.              </thead>
    36.                  <tfoot></tfoot>
    37.                  <tbody>
    38.                  <?php
    39.                  if(isset($reg_alumnos)){
    40.                  for($i=0;$i < count($reg_alumnos);$i++){
    41.                  ?>
    42.                         <tr>
    43.                         <th><?php echo $reg_alumnos[$i]["id"];?></th>
    44.                         <td><?php echo $reg_alumnos[$i]["name"];?></td>
    45.                         <td><?php echo $reg_alumnos[$i]["old"];?></td>
    46.                         <td><?php echo $reg_alumnos[$i]["ves"];?></td>
    47.                         <td><?php echo $reg_alumnos[$i]["date"];?></td>
    48.                         </tr>
    49.                         <?php
    50.                         }
    51.                         }
    52.                         ?>
    53.                  </tbody>
    54.            </table>
    55.            
    56. </body>
    57. </html>
    подскажите что не так...и нужно ли для этого метода
    Код (Text):
    1. header('Content-Type: application/vnd.ms-excel');
    2. header('Content-Disposition: attachment; filename="report.xls"');
    подключать дополнительные библиотеки?
     
  2. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Если что то выводиться в браузер до header то это может привести к такой ошибки.

    Попробуй убрать
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     
  3. rodion4657

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

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    большое спасибо помогло)))вот только с кодировкой проблемы теперь...в .xls файле вместо русских букв кракозябры всякие
     
  4. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    А xml в какой кодировке?
     
  5. rodion4657

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

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
  6. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Попробуй

    header('Content-Type: application/vnd.ms-excel;charset=utf-8');
     
  7. rodion4657

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

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    Я пробовал, не помогает((((
     
  8. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
  9. rodion4657

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

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    Благодарю, добрый человек)))

    Добавлено спустя 37 минут 43 секунды:
    заметил одну особенность, как только количество строк в html таблице становится меньше или равно 6 то в .xls файле русские буквы отображаются правильно, если превышает 6 то отображаются не правильно...с чем это может быть связано...
    ниже все скрипты...
    class.php
    Код (Text):
    1. <?php
    2. class Conectar {
    3. public static function con() {
    4. $conexion = mysql_connect("localhost","rau2","");
    5. mysql_query("SET NAMES 'cp1251'");
    6. mysql_select_db("baza2");
    7. return $conexion;
    8.    }
    9. }
    10. class Alumno{
    11. private $datos;
    12. public function __construct() {
    13. $this->datos = array();
    14. }
    15. public function listarTodos() {
    16. $sql = "SELECT * FROM t";
    17. $res =mysql_query($sql, Conectar::con());
    18. while($reg= mysql_fetch_assoc($res)) {
    19. $this->datos[] = $reg;
    20. }
    21. return $this->datos;
    22.   }
    23. }
    24. ?>
    index.php
    Код (Text):
    1. <?php
    2. require_once("class.php");
    3. $alumnos = new Alumno();
    4. $reg_alumnos=$alumnos->listarTodos();
    5. ?>
    6. <html>
    7. <head>
    8. <title>Untitled</title>
    9. </head>
    10. <body>
    11. <table border="1">
    12.     <thead>
    13.             <tr>
    14.                
    15.                 <th width="20">№</th>
    16.                 <th width="200">Имя</th>
    17.                 <th width="200">Возраст</th>
    18.                 <th width="200">Вес</th>
    19.                 <th width="200">Дата</th>
    20.                 </tr>
    21.              </thead>
    22.                  <tfoot></tfoot>
    23.                  <tbody>
    24.                  <?php
    25.                  if(isset($reg_alumnos)){
    26.                  for($i=0;$i < count($reg_alumnos);$i++){
    27.                  
    28.                   ?>
    29.                         <tr>
    30.                         <th><?php echo $reg_alumnos[$i]["id"];?></th>
    31.                         <td><?php echo $reg_alumnos[$i]["name"];?></td>
    32.                         <td><?php echo $reg_alumnos[$i]["old"];?></td>
    33.                         <td><?php echo $reg_alumnos[$i]["ves"];?></td>
    34.                         <td><?php echo $reg_alumnos[$i]["date"];?></td>
    35.                         </tr>
    36.                         <?php
    37.                         }
    38.                         }
    39.                         ?>
    40.                  </tbody>
    41.            </table>
    42.                 <form id="form1" name="form1" method="post" action="index_excel.php">
    43.                 <input type="submit" value="экспорт"/>
    44.  
    45. </form>
    46. </body>
    47. </html>
    index_excel.php
    Код (Text):
    1. <?php
    2. $fecha=date('d_m_Y');
    3. require_once("class.php");
    4. header("Content-Type: application/vnd.ms-excel;charset=cp1251");
    5. header("Content-Disposition: attachment; filename=Отет $fecha.xls");
    6. header("Content-Type: application/force-download");
    7. header("Content-Type: application/octet-stream");
    8. header("Content-Type: application/download");
    9. header("Content-Transfer-Encoding: binary ");
    10. $alumnos = new Alumno();
    11. $reg_alumnos=$alumnos->listarTodos();
    12. ?>
    13. <html>
    14. <head>
    15. <title>Untitled</title>
    16. </head>
    17. <body>
    18. <table border="1">
    19.     <thead>
    20.             <tr>
    21.                 <th width="20">№</th>
    22.                 <th width="200">Имя</th>
    23.                 <th width="200">Возраст</th>
    24.                 <th width="200">Вес</th>
    25.                 <th width="200">Дата</th>
    26.                 </tr>
    27.              </thead>
    28.                  <tfoot></tfoot>
    29.                  <tbody>
    30.                  <?php
    31.                  if(isset($reg_alumnos)){
    32.                  for($i=0;$i < count($reg_alumnos);$i++){
    33.                  ?>
    34.                         <tr>
    35.                         <th><?php echo $reg_alumnos[$i]["id"];?></th>
    36.                         <td><?php echo $reg_alumnos[$i]["name"];?></td>
    37.                         <td><?php echo $reg_alumnos[$i]["old"];?></td>
    38.                         <td><?php echo $reg_alumnos[$i]["ves"];?></td>
    39.                         <td><?php echo $reg_alumnos[$i]["date"];?></td>
    40.                         </tr>
    41.                         <?php
    42.                         }
    43.                         }
    44.                         ?>
    45.                  </tbody>
    46.            </table>
    47.            
    48. </body>
    49. </html>
     
  10. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Интересно а попробуй этот код

    Код (Text):
    1.  
    2. header("Cache-Control: private",false);
    3. header('Content-Type: application/vnd.ms-excel;');
    4. header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
    5. header("Content-Transfer-Encoding: binary");
    6. header("Content-Length: ".filesize($filename));
    7. readfile($filename);
    У меня exel с русскими буквами спокойно сохраняет
     
  11. rodion4657

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

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    все равно не работает...какую ты кодировку использовал в самой БД?
     
  12. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Кодировка в базе utf8_general_ci
     
  13. chpokcherepok

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

    С нами с:
    31 мар 2012
    Сообщения:
    10
    Симпатии:
    0
    саму кодировку файла пробовал менять?
    для корректного отображения кодировки должны совпадать в: БД, Таблице, Файле, Пропись вывода кодировки в файле (при необходимости).
    у меня бывает зачастую такое, отдельно писать на файл лень я меняю кодировку через phpDesigner
     
  14. rodion4657

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

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    попробывал не помогло...больше всего не могу понять почему как только количество строк в таблице переваливает за 6 не отображаются русские буквы , если же меньше то все хорошо...
     
  15. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Становится все интересней :)

    Попробуй мой код чисто создание файла и его сохранение.У меня все работает даже если в xls файле больше 6 строк.

    Код (Text):
    1. <?php
    2.  
    3. $filename = 'tt.xls';
    4.  
    5. $db = mysql_connect("localhost", "root", ""); mysql_select_db("r", $db);
    6. mysql_query("SET NAMES utf8");
    7.  
    8. $sql = 'SELECT * FROM table2 WHERE id = 7';
    9.  
    10. $result = mysql_query($sql, $db);
    11. $row = mysql_fetch_array($result);
    12.  
    13. require_once '/exel/Classes/PHPExcel.php';
    14. $phpExcel = new PHPExcel();
    15. $foo = $phpExcel->getActiveSheet()->setCellValue('A1', $row['name']);
    16. $phpExcel = PHPExcel_IOFactory::createWriter($phpExcel, 'Excel5');
    17. $phpExcel->save($filename);
    18.  
    19. header("Cache-Control: private",false);
    20. header('Content-Type: application/vnd.ms-excel;');
    21. header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
    22. header("Content-Transfer-Encoding: binary");
    23. header("Content-Length: ".filesize($filename));
    24. readfile($filename);
    25.  
    26.  
    27. ?>
    28. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    29.  
    30. <html xmlns="http://www.w3.org/1999/xhtml">
    31. <head profile="http://gmpg.org/xfn/11">
    32.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    33.    
    34. </head>
    35.  
    36. <body>
    37.  
    38. </body>
    39. </html>
    По поводу кода я особо не напрягался, так что он получился не очень... но зато работает (тебе придется достать PHPExcel).
    Скорректируй его под себя, УДАЧИ!
     
  16. rodion4657

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

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    спасибо за помощь...вот только есть одна проблема...
    мне нужно, чтобы таблица excel была такая же как и в данный момент html таблица(т.е. делать отчет по базе данных)
    Код (Text):
    1. $foo = $phpExcel->getActiveSheet()->setCellValue('A2', $row['name']);
    2. $foo = $phpExcel->getActiveSheet()->setCellValue('B2', $row['old']);
    3. $foo = $phpExcel->getActiveSheet()->setCellValue('C2', $row['ves']);
    4. $foo = $phpExcel->getActiveSheet()->setCellValue('D2', $row['date']);
    а из за-за того что в данном способе нужно заранее определять количество строк возникает проблема...я что то не могу понять как это сделать?и вообще как тут в цикле выводить данные из БД, чтобы каждая запись из БД размещалась в определенной ячейке excel-файла?подскажите пожалуйста...очень нужно...
     
  17. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Ну раз очень нужно щас помогу :)

    Как я понимаю количество столбцов известно, проблема в количестве строк тогда можно так

    Код (Text):
    1.  
    2. for($i = 1;$row = mysql_fetch_array($result);$i++)
    3. {
    4.     $foo = $phpExcel->getActiveSheet()->setCellValue('A'.$i, $row['name']);
    5.     $foo = $phpExcel->getActiveSheet()->setCellValue('B'.$i, $row['id']);
    6. }
    Ну а насчет скачивания правильней так

    Код (Text):
    1.  
    2.         // Generate the server headers
    3.         if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE"))
    4.         {
    5.             header('Content-Type: "'.$mime.'"');
    6.             header('Content-Disposition: attachment; filename="'.$filename.'"');
    7.             header('Expires: 0');
    8.             header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    9.             header("Content-Transfer-Encoding: binary");
    10.             header('Pragma: public');
    11.             header("Content-Length: ".strlen($data));
    12.         }
    13.         else
    14.         {
    15.             header('Content-Type: "'.$mime.'"');
    16.             header('Content-Disposition: attachment; filename="'.$filename.'"');
    17.             header("Content-Transfer-Encoding: binary");
    18.             header('Expires: 0');
    19.             header('Pragma: no-cache');
    20.             header("Content-Length: ".strlen($data));
    21.         }
    Позаимствовал у Codeigniter
     
  18. rodion4657

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

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    спасибо большое!!!!вы мне очень помогли...
    Код (Text):
    1.  // Generate the server headers
    2.       if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE"))
    3.       {
    4.          header('Content-Type: "'.$mime.'"');
    5.          header('Content-Disposition: attachment; filename="'.$filename.'"');
    6.          header('Expires: 0');
    7.          header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    8.          header("Content-Transfer-Encoding: binary");
    9.          header('Pragma: public');
    10.          header("Content-Length: ".strlen($data));
    11.       }
    12.       else
    13.       {
    14.          header('Content-Type: "'.$mime.'"');
    15.          header('Content-Disposition: attachment; filename="'.$filename.'"');
    16.          header("Content-Transfer-Encoding: binary");
    17.          header('Expires: 0');
    18.          header('Pragma: no-cache');
    19.          header("Content-Length: ".strlen($data));
    20.       }
    почему правильней именно так?я попробовал выдало несколько ошибок, использовал старые заголовки
    Код (Text):
    1. header("Cache-Control: private",false);
    2. header('Content-Type: application/vnd.ms-excel;');
    3. header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
    4. header("Content-Transfer-Encoding: binary");
    5. header("Content-Length: ".filesize($filename));
    6. readfile($filename);
    все работает хорошо)
     
  19. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Я тебе к сожалению не полный код дал, был вечер уставший...

    Вот полный код все работает сам проверил

    Код (Text):
    1.  
    2. $data = file_get_contents($filename);
    3.  
    4.           // Generate the server headers
    5.           if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE"))
    6.           {
    7.              header('Content-Type: application/vnd.ms-excel;');
    8.              header('Content-Disposition: attachment; filename="'.$filename.'"');
    9.              header('Expires: 0');
    10.              header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    11.              header("Content-Transfer-Encoding: binary");
    12.              header('Pragma: public');
    13.              header("Content-Length: ".strlen($data));
    14.           }
    15.           else
    16.           {
    17.              header('Content-Type: application/vnd.ms-excel;');
    18.              header('Content-Disposition: attachment; filename="'.$filename.'"');
    19.              header("Content-Transfer-Encoding: binary");
    20.              header('Expires: 0');
    21.              header('Pragma: no-cache');
    22.              header("Content-Length: ".strlen($data));
    23.           }
    24.     exit($data);
     
  20. rodion4657

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

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    Спасибо))
     
  21. rodion4657

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

    С нами с:
    24 янв 2012
    Сообщения:
    135
    Симпатии:
    0
    хочу, чтобы в excel файл уходили данные только по результату поиска, подскажите где ошибка в коде, не пойму
    ...........................................................................................................................................
    Код (Text):
    1. <?php
    2.  
    3.  $filename = 'tt.xls';
    4.  
    5. /* Соединение, выбор БД */
    6. $db = mysql_connect("localhost", "rau2", ""); mysql_select_db("baza2", $db);
    7. mysql_query("SET NAMES UTF-8");
    8.  
    9. $query = "SELECT * FROM t WHERE UPPER (date) LIKE '%".strtoupper($_POST['date'])."%'";
    10.   $res = mysql_query( $query,$db ) or die("Запрос ошибочный");
    11.  
    12.    echo '<h2>База</h2>';
    13.    echo '<table border="1" cellpadding="2" cellspacing="0">';
    14.   echo '<tr><th>ID</th><th>Имя</th><th>Возраст</th><th>Вес</th><th>Дата</th><th>Ред.</th><th>Удл.</th></tr>';
    15.  
    16.  $row = mysql_fetch_array($res);
    17.  
    18.   while ( $row = mysql_fetch_array( $res ) )
    19.    {
    20.      echo '<tr>';
    21.      echo '<td>'.$row['id'].'</td>';
    22.      echo '<td>'.$row['name'].'</td>';
    23.      echo '<td>'.$row['old'].'</td>';
    24.      echo '<td>'.$row['ves'].'</td>';
    25.       echo '<td>'.$row['date'].'</td>';  
    26.      echo '<td><a href="'.$_SERVER['PHP_SELF'].'?action=editform&id='.$row['id'].'">Ред.</a></td>';
    27.      echo '<td><a href="'.$_SERVER['PHP_SELF'].'?action=delete&id='.$row['id'].'">Удл.</a></td>';
    28.      echo '</tr>';
    29.    }
    30.    echo '</table>';
    31.      echo '</br></br><td><button type="button" onClick="history.back();">Отобразить всю базу данных</button></td>';
    32.  
    33.  
    34. require_once 'Z:/home/localhost/www/PhpExcel/Classes/PHPExcel.php';
    35. $phpExcel = new PHPExcel();
    36.  
    37.  for($i = 2;$row = mysql_fetch_array($res);$i++)
    38.  {
    39. $foo = $phpExcel->getActiveSheet()->setCellValue('A1', 'Имя');
    40. $foo = $phpExcel->getActiveSheet()->setCellValue('B1', 'Возраст');
    41. $foo = $phpExcel->getActiveSheet()->setCellValue('C1', 'Вес');
    42. $foo = $phpExcel->getActiveSheet()->setCellValue('D1', 'Дата');
    43.  
    44. $foo = $phpExcel->getActiveSheet()->setCellValue('A'.$i, $row['name']);
    45. $foo = $phpExcel->getActiveSheet()->setCellValue('B'.$i, $row['old']);
    46. $foo = $phpExcel->getActiveSheet()->setCellValue('C'.$i, $row['ves']);
    47. $foo = $phpExcel->getActiveSheet()->setCellValue('D'.$i, $row['date']);
    48. }
    49.  
    50. $phpExcel = PHPExcel_IOFactory::createWriter($phpExcel, 'Excel5');
    51. $phpExcel->save($filename);
    52.  
    53.  
    54.  $data = file_get_contents($filename);
    55.  
    56.           // Generate the server headers
    57.           if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE"))
    58.           {
    59.              header('Content-Type: application/vnd.ms-excel;');
    60.              header('Content-Disposition: attachment; filename="'.$filename.'"');
    61.              header('Expires: 0');
    62.              header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    63.              header("Content-Transfer-Encoding: binary");
    64.              header('Pragma: public');
    65.              header("Content-Length: ".strlen($data));
    66.           }
    67.           else
    68.           {
    69.              header('Content-Type: application/vnd.ms-excel;');
    70.              header('Content-Disposition: attachment; filename="'.$filename.'"');
    71.              header("Content-Transfer-Encoding: binary");
    72.              header('Expires: 0');
    73.              header('Pragma: no-cache');
    74.              header("Content-Length: ".strlen($data));
    75.           }
    76.    exit($data);
    77.  
    78.  
    79.    
    80. ?>
    81. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    82.  
    83. <html xmlns="http://www.w3.org/1999/xhtml">
    84. <head profile="http://gmpg.org/xfn/11">
    85.    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    86.    
    87. </head>
    88.  
    89. <body>
    90.  
    91. </body>
    92. </html>