2015-04-22 2 views
2

Я хочу экспортировать .xls-файл из базы данных, используя phpexcel. Он отлично работает, однако немецкие гласные действительно много неприятностей. Вот мой код:PHPExcel Немецкие гласные

<?php 
 
date_default_timezone_set('Europe/Rome'); 
 

 
/***** EDIT BELOW LINES *****/ 
 
$DB_Server = "localhost"; // MySQL Server 
 
$DB_Username = "user"; // MySQL Username 
 
$DB_Password = "passw"; // MySQL Password 
 
$DB_DBName = "test2015"; // MySQL Database Name 
 
$xls_filename = 'export_'.date('Y-m-d').'.xls'; // Define Excel (.xls) file name 
 

 

 

 

 

 
/***** DO NOT EDIT BELOW LINES *****/ 
 
// Create MySQL connection 
 
$sql = "select * from Teilnehmer join mannschaften mann ON mann.M_id = Teilnehmer.Team"; 
 
$Connect = @mysql_connect($DB_Server, $DB_Username, $DB_Password) or die("Failed to connect to MySQL:<br />" . mysql_error() . "<br />" . mysql_errno()); 
 
// Select database 
 
$Db = @mysql_select_db($DB_DBName, $Connect) or die("Failed to select database:<br />" . mysql_error(). "<br />" . mysql_errno()); 
 
// Execute query 
 
$result = @mysql_query($sql,$Connect) or die("Failed to execute query:<br />" . mysql_error(). "<br />" . mysql_errno()); 
 

 

 

 
/** Error reporting */ 
 
error_reporting(E_ALL); 
 
ini_set('display_errors', TRUE); 
 
ini_set('display_startup_errors', TRUE); 
 

 
if (PHP_SAPI == 'cli') 
 
     die('This example should only be run from a Web Browser'); 
 

 
/** Include PHPExcel */ 
 
require_once dirname(__FILE__) . '/Classes/PHPExcel.php'; 
 

 

 
// Create new PHPExcel object 
 
$objPHPExcel = new PHPExcel(); 
 

 
// Set document properties 
 
$objPHPExcel->getProperties()->setCreator("Piok") 
 
->setLastModifiedBy("PIOK") 
 
->setTitle("Piok") 
 
->setSubject("Piok") 
 
->setDescription("Piok") 
 
->setKeywords("Piok") 
 
->setCategory("Piok"); 
 

 

 
// Add some data 
 
$objPHPExcel->setActiveSheetIndex(0) 
 
->setCellValue('A1', 'Vorname') 
 
->setCellValue('B1', 'Nachname') 
 
->setCellValue('C1', 'Jahrgang') 
 
->setCellValue('D1', 'Geschlecht') 
 
->setCellValue('E1', 'Email') 
 
->setCellValue('F1', 'FISICODE') 
 
->setCellValue('G1', 'Mannschaft'); 
 

 

 
$startzeile = 2; 
 
while($row = mysql_fetch_row($result)) 
 
{ 
 
     $objPHPExcel->setActiveSheetIndex(0) 
 
     ->setCellValue('A'.$startzeile , $row[1]) 
 
     ->setCellValue('B'.$startzeile , $row[2]) 
 
     ->setCellValue('C'.$startzeile , $row[3]) 
 
     ->setCellValue('D'.$startzeile , $row[4]) 
 
     ->setCellValue('E'.$startzeile , $row[6]) 
 
     ->setCellValue('F'.$startzeile , $row[7]) 
 
     ->setCellValue('G'.$startzeile , $row[9]); 
 

 
     $startzeile++; 
 
} 
 

 
// Rename worksheet 
 
$objPHPExcel->getActiveSheet()->setTitle($xls_filename); 
 

 

 
// Set active sheet index to the first sheet, so Excel opens this as the first sheet 
 
$objPHPExcel->setActiveSheetIndex(0); 
 

 

 
// Redirect output to a client’s web browser (Excel5) 
 
header('Content-Type: application/vnd.ms-excel; charset=utf-8'); 
 
header('Content-Disposition: attachment;filename="'.$xls_filename.'"'); 
 
header('Cache-Control: max-age=0'); 
 
// If you're serving to IE 9, then the following may be needed 
 
header('Cache-Control: max-age=1'); 
 

 
// If you're serving to IE over SSL, then the following may be needed 
 
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past 
 
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified 
 
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1 
 
header ('Pragma: public'); // HTTP/1.0 
 

 
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
 
$objWriter->save('php://output'); 
 

 
exit; 
 
?>

Я использую PHP 5.5 кодирования PHP-файла устанавливается в UTF-8. Спасибо за помощь.

+1

Кодирование в файле может быть UTF-8, но как насчет вашего соединения с базой данных? Правильно ли выполняется сортировка базы данных/таблицы/столбца (utf8mb4 _ * _ ci или utf8 _ * _ ci)? – Phylogenesis

ответ

1

Такие проблемы, как это, как правило, является результатом использования неправильного кодирования в одном из способов получения данных из одной среды в другую.

Ваш Excel-выход устанавливает Charset в utf-8, что является нормальным делом. Теперь вы должны проверить, какую кодировку вы используете в своей базе данных, и убедитесь, что это UTF-8.

И в качестве последнего шага убедитесь, что вы «разговариваете» в UTF-8 с базой данных.

mysql_set_charset("UTF8", $Connect); 
+0

Это решило мою проблему! Большое спасибо! –

0

Попробуйте очистить выходной буфер. Следующий ответ будет вам полезен. Это работа для меня.

<?php 
 
date_default_timezone_set('Europe/Rome'); 
 

 
/***** EDIT BELOW LINES *****/ 
 
$DB_Server = "localhost"; // MySQL Server 
 
$DB_Username = "user"; // MySQL Username 
 
$DB_Password = "passw"; // MySQL Password 
 
$DB_DBName = "test2015"; // MySQL Database Name 
 
$xls_filename = 'export_'.date('Y-m-d').'.xls'; // Define Excel (.xls) file name 
 

 

 

 

 

 
/***** DO NOT EDIT BELOW LINES *****/ 
 
// Create MySQL connection 
 
$sql = "select * from Teilnehmer join mannschaften mann ON mann.M_id = Teilnehmer.Team"; 
 
$Connect = @mysql_connect($DB_Server, $DB_Username, $DB_Password) or die("Failed to connect to MySQL:<br />" . mysql_error() . "<br />" . mysql_errno()); 
 
// Select database 
 
$Db = @mysql_select_db($DB_DBName, $Connect) or die("Failed to select database:<br />" . mysql_error(). "<br />" . mysql_errno()); 
 
// Execute query 
 
$result = @mysql_query($sql,$Connect) or die("Failed to execute query:<br />" . mysql_error(). "<br />" . mysql_errno()); 
 

 

 

 
/** Error reporting */ 
 
error_reporting(E_ALL); 
 
ini_set('display_errors', TRUE); 
 
ini_set('display_startup_errors', TRUE); 
 

 
if (PHP_SAPI == 'cli') 
 
     die('This example should only be run from a Web Browser'); 
 

 
/** Include PHPExcel */ 
 
require_once dirname(__FILE__) . '/Classes/PHPExcel.php'; 
 

 

 
//clean output buffer previously 
 
ob_end_clean(); 
 

 
//start output buffer 
 
ob_start(); 
 

 
// Create new PHPExcel object 
 
$objPHPExcel = new PHPExcel(); 
 

 
// Set document properties 
 
$objPHPExcel->getProperties()->setCreator("Piok") 
 
->setLastModifiedBy("PIOK") 
 
->setTitle("Piok") 
 
->setSubject("Piok") 
 
->setDescription("Piok") 
 
->setKeywords("Piok") 
 
->setCategory("Piok"); 
 

 

 
// Add some data 
 
$objPHPExcel->setActiveSheetIndex(0) 
 
->setCellValue('A1', 'Vorname') 
 
->setCellValue('B1', 'Nachname') 
 
->setCellValue('C1', 'Jahrgang') 
 
->setCellValue('D1', 'Geschlecht') 
 
->setCellValue('E1', 'Email') 
 
->setCellValue('F1', 'FISICODE') 
 
->setCellValue('G1', 'Mannschaft'); 
 

 

 
$startzeile = 2; 
 
while($row = mysql_fetch_row($result)) 
 
{ 
 
     $objPHPExcel->setActiveSheetIndex(0) 
 
     ->setCellValue('A'.$startzeile , $row[1]) 
 
     ->setCellValue('B'.$startzeile , $row[2]) 
 
     ->setCellValue('C'.$startzeile , $row[3]) 
 
     ->setCellValue('D'.$startzeile , $row[4]) 
 
     ->setCellValue('E'.$startzeile , $row[6]) 
 
     ->setCellValue('F'.$startzeile , $row[7]) 
 
     ->setCellValue('G'.$startzeile , $row[9]); 
 

 
     $startzeile++; 
 
} 
 

 
// Rename worksheet 
 
$objPHPExcel->getActiveSheet()->setTitle($xls_filename); 
 

 

 
// Set active sheet index to the first sheet, so Excel opens this as the first sheet 
 
$objPHPExcel->setActiveSheetIndex(0); 
 

 

 
// Redirect output to a client’s web browser (Excel5) 
 
header('Content-Type: application/vnd.ms-excel; charset=utf-8'); 
 
header('Content-Disposition: attachment;filename="'.$xls_filename.'"'); 
 
header('Cache-Control: max-age=0'); 
 
// If you're serving to IE 9, then the following may be needed 
 
header('Cache-Control: max-age=1'); 
 

 
// If you're serving to IE over SSL, then the following may be needed 
 
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past 
 
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified 
 
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1 
 
header ('Pragma: public'); // HTTP/1.0 
 

 
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
 
$objWriter->save('php://output'); 
 

 
//Cleaning the ouput buffer 
 
ob_flush(); 
 
exit; 
 
?>

Смежные вопросы