хочу сформировать отчет файл .xls пишет вот что вот сам index_excel.php Код (Text): <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <?php //$fecha=date('d_m_Y'); require_once("class.php"); header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment; filename="report.xls"'); //header("Content-Type: application/force-download"); // header("Content-Type: application/octet-stream"); // header("Content-Type: application/download"); //header('Cache-Control: max-age=0'); //$writer = PHPExcel_IOFactory::createWriter($xls, 'Excel5'); //$writer->save('php://output'); //exit; //header("Content-Transfer-Encoding: binary "); $alumnos = new Alumno(); $reg_alumnos=$alumnos->listarTodos(); ?> <html> <head> <title>Untitled</title> </head> <body> <table border="1"> <thead> <tr> <th width="20">id</th> <th width="200">name</th> <th width="200">old</th> <th width="200">ves</th> <th width="200">date</th> </tr> </thead> <tfoot></tfoot> <tbody> <?php if(isset($reg_alumnos)){ for($i=0;$i < count($reg_alumnos);$i++){ ?> <tr> <th><?php echo $reg_alumnos[$i]["id"];?></th> <td><?php echo $reg_alumnos[$i]["name"];?></td> <td><?php echo $reg_alumnos[$i]["old"];?></td> <td><?php echo $reg_alumnos[$i]["ves"];?></td> <td><?php echo $reg_alumnos[$i]["date"];?></td> </tr> <?php } } ?> </tbody> </table> </body> </html> подскажите что не так...и нужно ли для этого метода Код (Text): header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment; filename="report.xls"'); подключать дополнительные библиотеки?
Если что то выводиться в браузер до header то это может привести к такой ошибки. Попробуй убрать <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
большое спасибо помогло)))вот только с кодировкой проблемы теперь...в .xls файле вместо русских букв кракозябры всякие
А для чего ты закоментировал строки? Так сразу сказать как-то сложно посмотри эти ссылки думаю если сделать как там описано то заработает http://www.zapishi.net/show/it-tehn...rt_v_excel_bez_sohraneniia_faijla_na_servere/ http://backnet.ru/2011/12/13/prostoy-sposob-vyigruzki-tablitsyi-v-excel-iz-php/
Благодарю, добрый человек))) Добавлено спустя 37 минут 43 секунды: заметил одну особенность, как только количество строк в html таблице становится меньше или равно 6 то в .xls файле русские буквы отображаются правильно, если превышает 6 то отображаются не правильно...с чем это может быть связано... ниже все скрипты... class.php Код (Text): <?php class Conectar { public static function con() { $conexion = mysql_connect("localhost","rau2",""); mysql_query("SET NAMES 'cp1251'"); mysql_select_db("baza2"); return $conexion; } } class Alumno{ private $datos; public function __construct() { $this->datos = array(); } public function listarTodos() { $sql = "SELECT * FROM t"; $res =mysql_query($sql, Conectar::con()); while($reg= mysql_fetch_assoc($res)) { $this->datos[] = $reg; } return $this->datos; } } ?> index.php Код (Text): <?php require_once("class.php"); $alumnos = new Alumno(); $reg_alumnos=$alumnos->listarTodos(); ?> <html> <head> <title>Untitled</title> </head> <body> <table border="1"> <thead> <tr> <th width="20">№</th> <th width="200">Имя</th> <th width="200">Возраст</th> <th width="200">Вес</th> <th width="200">Дата</th> </tr> </thead> <tfoot></tfoot> <tbody> <?php if(isset($reg_alumnos)){ for($i=0;$i < count($reg_alumnos);$i++){ ?> <tr> <th><?php echo $reg_alumnos[$i]["id"];?></th> <td><?php echo $reg_alumnos[$i]["name"];?></td> <td><?php echo $reg_alumnos[$i]["old"];?></td> <td><?php echo $reg_alumnos[$i]["ves"];?></td> <td><?php echo $reg_alumnos[$i]["date"];?></td> </tr> <?php } } ?> </tbody> </table> <form id="form1" name="form1" method="post" action="index_excel.php"> <input type="submit" value="экспорт"/> </form> </body> </html> index_excel.php Код (Text): <?php $fecha=date('d_m_Y'); require_once("class.php"); header("Content-Type: application/vnd.ms-excel;charset=cp1251"); header("Content-Disposition: attachment; filename=Отет $fecha.xls"); header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); header("Content-Transfer-Encoding: binary "); $alumnos = new Alumno(); $reg_alumnos=$alumnos->listarTodos(); ?> <html> <head> <title>Untitled</title> </head> <body> <table border="1"> <thead> <tr> <th width="20">№</th> <th width="200">Имя</th> <th width="200">Возраст</th> <th width="200">Вес</th> <th width="200">Дата</th> </tr> </thead> <tfoot></tfoot> <tbody> <?php if(isset($reg_alumnos)){ for($i=0;$i < count($reg_alumnos);$i++){ ?> <tr> <th><?php echo $reg_alumnos[$i]["id"];?></th> <td><?php echo $reg_alumnos[$i]["name"];?></td> <td><?php echo $reg_alumnos[$i]["old"];?></td> <td><?php echo $reg_alumnos[$i]["ves"];?></td> <td><?php echo $reg_alumnos[$i]["date"];?></td> </tr> <?php } } ?> </tbody> </table> </body> </html>
Интересно а попробуй этот код Код (Text): header("Cache-Control: private",false); header('Content-Type: application/vnd.ms-excel;'); header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" ); header("Content-Transfer-Encoding: binary"); header("Content-Length: ".filesize($filename)); readfile($filename); У меня exel с русскими буквами спокойно сохраняет
саму кодировку файла пробовал менять? для корректного отображения кодировки должны совпадать в: БД, Таблице, Файле, Пропись вывода кодировки в файле (при необходимости). у меня бывает зачастую такое, отдельно писать на файл лень я меняю кодировку через phpDesigner
попробывал не помогло...больше всего не могу понять почему как только количество строк в таблице переваливает за 6 не отображаются русские буквы , если же меньше то все хорошо...
Становится все интересней Попробуй мой код чисто создание файла и его сохранение.У меня все работает даже если в xls файле больше 6 строк. Код (Text): <?php $filename = 'tt.xls'; $db = mysql_connect("localhost", "root", ""); mysql_select_db("r", $db); mysql_query("SET NAMES utf8"); $sql = 'SELECT * FROM table2 WHERE id = 7'; $result = mysql_query($sql, $db); $row = mysql_fetch_array($result); require_once '/exel/Classes/PHPExcel.php'; $phpExcel = new PHPExcel(); $foo = $phpExcel->getActiveSheet()->setCellValue('A1', $row['name']); $phpExcel = PHPExcel_IOFactory::createWriter($phpExcel, 'Excel5'); $phpExcel->save($filename); header("Cache-Control: private",false); header('Content-Type: application/vnd.ms-excel;'); header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" ); header("Content-Transfer-Encoding: binary"); header("Content-Length: ".filesize($filename)); readfile($filename); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head profile="http://gmpg.org/xfn/11"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> </body> </html> По поводу кода я особо не напрягался, так что он получился не очень... но зато работает (тебе придется достать PHPExcel). Скорректируй его под себя, УДАЧИ!
спасибо за помощь...вот только есть одна проблема... мне нужно, чтобы таблица excel была такая же как и в данный момент html таблица(т.е. делать отчет по базе данных) Код (Text): $foo = $phpExcel->getActiveSheet()->setCellValue('A2', $row['name']); $foo = $phpExcel->getActiveSheet()->setCellValue('B2', $row['old']); $foo = $phpExcel->getActiveSheet()->setCellValue('C2', $row['ves']); $foo = $phpExcel->getActiveSheet()->setCellValue('D2', $row['date']); а из за-за того что в данном способе нужно заранее определять количество строк возникает проблема...я что то не могу понять как это сделать?и вообще как тут в цикле выводить данные из БД, чтобы каждая запись из БД размещалась в определенной ячейке excel-файла?подскажите пожалуйста...очень нужно...
Ну раз очень нужно щас помогу Как я понимаю количество столбцов известно, проблема в количестве строк тогда можно так Код (Text): for($i = 1;$row = mysql_fetch_array($result);$i++) { $foo = $phpExcel->getActiveSheet()->setCellValue('A'.$i, $row['name']); $foo = $phpExcel->getActiveSheet()->setCellValue('B'.$i, $row['id']); } Ну а насчет скачивания правильней так Код (Text): // Generate the server headers if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) { header('Content-Type: "'.$mime.'"'); header('Content-Disposition: attachment; filename="'.$filename.'"'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header("Content-Transfer-Encoding: binary"); header('Pragma: public'); header("Content-Length: ".strlen($data)); } else { header('Content-Type: "'.$mime.'"'); header('Content-Disposition: attachment; filename="'.$filename.'"'); header("Content-Transfer-Encoding: binary"); header('Expires: 0'); header('Pragma: no-cache'); header("Content-Length: ".strlen($data)); } Позаимствовал у Codeigniter
спасибо большое!!!!вы мне очень помогли... Код (Text): // Generate the server headers if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) { header('Content-Type: "'.$mime.'"'); header('Content-Disposition: attachment; filename="'.$filename.'"'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header("Content-Transfer-Encoding: binary"); header('Pragma: public'); header("Content-Length: ".strlen($data)); } else { header('Content-Type: "'.$mime.'"'); header('Content-Disposition: attachment; filename="'.$filename.'"'); header("Content-Transfer-Encoding: binary"); header('Expires: 0'); header('Pragma: no-cache'); header("Content-Length: ".strlen($data)); } почему правильней именно так?я попробовал выдало несколько ошибок, использовал старые заголовки Код (Text): header("Cache-Control: private",false); header('Content-Type: application/vnd.ms-excel;'); header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" ); header("Content-Transfer-Encoding: binary"); header("Content-Length: ".filesize($filename)); readfile($filename); все работает хорошо)
Я тебе к сожалению не полный код дал, был вечер уставший... Вот полный код все работает сам проверил Код (Text): $data = file_get_contents($filename); // Generate the server headers if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) { header('Content-Type: application/vnd.ms-excel;'); header('Content-Disposition: attachment; filename="'.$filename.'"'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header("Content-Transfer-Encoding: binary"); header('Pragma: public'); header("Content-Length: ".strlen($data)); } else { header('Content-Type: application/vnd.ms-excel;'); header('Content-Disposition: attachment; filename="'.$filename.'"'); header("Content-Transfer-Encoding: binary"); header('Expires: 0'); header('Pragma: no-cache'); header("Content-Length: ".strlen($data)); } exit($data);
хочу, чтобы в excel файл уходили данные только по результату поиска, подскажите где ошибка в коде, не пойму ........................................................................................................................................... Код (Text): <?php $filename = 'tt.xls'; /* Соединение, выбор БД */ $db = mysql_connect("localhost", "rau2", ""); mysql_select_db("baza2", $db); mysql_query("SET NAMES UTF-8"); $query = "SELECT * FROM t WHERE UPPER (date) LIKE '%".strtoupper($_POST['date'])."%'"; $res = mysql_query( $query,$db ) or die("Запрос ошибочный"); echo '<h2>База</h2>'; echo '<table border="1" cellpadding="2" cellspacing="0">'; echo '<tr><th>ID</th><th>Имя</th><th>Возраст</th><th>Вес</th><th>Дата</th><th>Ред.</th><th>Удл.</th></tr>'; $row = mysql_fetch_array($res); while ( $row = mysql_fetch_array( $res ) ) { echo '<tr>'; echo '<td>'.$row['id'].'</td>'; echo '<td>'.$row['name'].'</td>'; echo '<td>'.$row['old'].'</td>'; echo '<td>'.$row['ves'].'</td>'; echo '<td>'.$row['date'].'</td>'; echo '<td><a href="'.$_SERVER['PHP_SELF'].'?action=editform&id='.$row['id'].'">Ред.</a></td>'; echo '<td><a href="'.$_SERVER['PHP_SELF'].'?action=delete&id='.$row['id'].'">Удл.</a></td>'; echo '</tr>'; } echo '</table>'; echo '</br></br><td><button type="button" onClick="history.back();">Отобразить всю базу данных</button></td>'; require_once 'Z:/home/localhost/www/PhpExcel/Classes/PHPExcel.php'; $phpExcel = new PHPExcel(); for($i = 2;$row = mysql_fetch_array($res);$i++) { $foo = $phpExcel->getActiveSheet()->setCellValue('A1', 'Имя'); $foo = $phpExcel->getActiveSheet()->setCellValue('B1', 'Возраст'); $foo = $phpExcel->getActiveSheet()->setCellValue('C1', 'Вес'); $foo = $phpExcel->getActiveSheet()->setCellValue('D1', 'Дата'); $foo = $phpExcel->getActiveSheet()->setCellValue('A'.$i, $row['name']); $foo = $phpExcel->getActiveSheet()->setCellValue('B'.$i, $row['old']); $foo = $phpExcel->getActiveSheet()->setCellValue('C'.$i, $row['ves']); $foo = $phpExcel->getActiveSheet()->setCellValue('D'.$i, $row['date']); } $phpExcel = PHPExcel_IOFactory::createWriter($phpExcel, 'Excel5'); $phpExcel->save($filename); $data = file_get_contents($filename); // Generate the server headers if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) { header('Content-Type: application/vnd.ms-excel;'); header('Content-Disposition: attachment; filename="'.$filename.'"'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header("Content-Transfer-Encoding: binary"); header('Pragma: public'); header("Content-Length: ".strlen($data)); } else { header('Content-Type: application/vnd.ms-excel;'); header('Content-Disposition: attachment; filename="'.$filename.'"'); header("Content-Transfer-Encoding: binary"); header('Expires: 0'); header('Pragma: no-cache'); header("Content-Length: ".strlen($data)); } exit($data); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head profile="http://gmpg.org/xfn/11"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> </body> </html>