2011-02-04 7 views
0

Кто-нибудь знает о методе экспорта определенных полей из базы данных с настраиваемыми заголовками столбцов в Excel из MSQL с использованием PHP?Индивидуальный экспорт PHP Excel

Где есть ресурсы на это?

+2

http://stackoverflow.com/search?q=generate+ excel + file +% 5Bphp% 5D – deceze

+0

Должен быть формат excel или CSV достаточно хорош? –

+0

должно быть excel unfortunetly ... – Mike

ответ

1

Excel с радостью прочитает CSV-файл в виде таблицы. CSV это просто текстовый формат, таким образом, создать какой-нибудь текст и эхо его с соответствующим типом содержимого:

$query = "SELECT col1, col2, col3 FROM table"; 
$result = mysql_query($query); 

$csv = '"First Column Title","Second Column Title","Third Column Title"' . "\n"; 
while ($row = mysql_fetch_assoc($result)) { 
    $csv .= '"' . str_replace('"', '""', $row['col1']) . '",'; 
    $csv .= '"' . str_replace('"', '""', $row['col2']) . '",'; 
    $csv .= '"' . str_replace('"', '""', $row['col3']) . '"' . "\n"; 
} 

header("Content-type: application/vnd.ms-excel"); 
echo $csv; 
+0

$ csv. = '' '. Str_replace (' '', '""', $ row ['col1']). '', '; Что находится в' 'меток? – Mike

+0

Майк, я считаю, что он дважды цитирует любые кавычки, которые находятся в полях из-за того, как файлы .csv используют кавычки. – Trevor

+0

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

1

вобще выберите на полях, которые вы хотите, и выводить результаты с полями, разделенными запятыми, и каждый строка на собственной линии. В идеале должно должно быть окружение каждого значения кавычками и addslashes(), чтобы избежать кавычек в данных.

Вывести результат и сохранить в файл с именем, заканчивающимся на .csv, и открыть его в Excel.

4

Использование PHPExcel библиотеки:

// connection with the database 
$dbhost = "localhost"; 
$dbuser = "root"; 
$dbpass = ""; 
$dbname = "database"; 

mysql_connect($dbhost,$dbuser,$dbpass); 
mysql_select_db($dbname); 

// require the PHPExcel file 
require 'Classes/PHPExcel.php'; 

// simple query 

$query = "SELECT username,emailAdress,locationCity FROM users ORDER by id DESC"; 
$headings = array('User Name', 'EMail Address','City'); 

if ($result = mysql_query($query) or die(mysql_error())) { 
    // Create a new PHPExcel object 
    $objPHPExcel = new PHPExcel(); 
    $objPHPExcel->getActiveSheet()->setTitle('List of Users'); 

    $rowNumber = 1; 
    $col = 'A'; 
    foreach($headings as $heading) { 
     $objPHPExcel->getActiveSheet()->setCellValue($col.$rowNumber,$heading); 
     $col++; 
    } 

    // Loop through the result set 
    $rowNumber = 2; 
    while ($row = mysql_fetch_row($result)) { 
     $col = 'A'; 
     foreach($row as $cell) { 
      $objPHPExcel->getActiveSheet()->setCellValue($col.$rowNumber,$cell); 
      $col++; 
     } 
     $rowNumber++; 
    } 

    // Freeze pane so that the heading line will not scroll 
    $objPHPExcel->getActiveSheet()->freezePane('A2'); 

    // Save as an Excel BIFF (xls) file 
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 

    header('Content-Type: application/vnd.ms-excel'); 
    header('Content-Disposition: attachment;filename="userList.xls"'); 
    header('Cache-Control: max-age=0'); 

    $objWriter->save('php://output'); 
    exit(); 
} 
echo 'a problem has occurred... no data retrieved from the database'; 

Используя PHPExcel, вы можете также добавить форматирование, или создавать рабочие книги с несколькими рабочими листами и т.д.

+0

+1 Для PHPExcel, но имейте в виду, что он использует много ресурсов (ну, много памяти) , – wimvds

+2

@wimvds - Я полностью понимаю ** все ** ограничения PHPExcel ... Я разработчик, и там есть трюки и приемы, которые можно использовать для уменьшения памяти и улучшения скорости. –

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