2010-11-27 4 views
0

У меня есть PHP-скрипт для экспорта таблицы MYSQL в формат Excel, но я получаю некоторую проблему после экспорта таблицы. Данные, полученные из db, показывают только одну строку.Экспорт таблицы MYSQL в excel

Это следующий сценарий:

$dbc=mysql_connect(_SRV,_ACCID,_PWD) or die(_ERROR15.": ".mysql_error()); 
$db=mysql_select_db("qdbase",$dbc) or die(_ERROR17.": ".mysql_error()); 

$sQuery = "SELECT id, Line, Model,Lot_no, 
        COUNT(Serial_number) AS Qty, 
        SUM(S), SUM(A), SUM(B), SUM(C), 
        (SUM(S) + SUM(A) + SUM(B)*0.4 + SUM(C)*0.1)/COUNT(Serial_number) AS QP, 
        ROUND((SUM(S) + SUM(A) + SUM(B)*0.4 + SUM(C)*0.1)/COUNT(Serial_number)*1000,2) AS PPM 
      FROM `inspection_report`"; 

$rResult = mysql_query($sQuery) or die(); 
$count = mysql_num_fields($rResult); 

// fetch table header 
$header = ''; 
for ($i = 0; $i < $count; $i++){ 
     $header .= mysql_field_name($rResult, $i)."\t"; 
     } 
// fetch data each row, store on tabular row data 
while($row = mysql_fetch_row($rResult)){ 
     $line = ''; 
     foreach($row as $value){ 
       if(!isset($value) || $value == ""){ 
        $value = "\t"; 
       }else{ 
        $value = str_replace('"', '""', $value); 
        $value = '"' . $value . '"' . "\t"; 
        } 
       $line .= $value; 
       } 
     $data .= trim($line)."\n"; 
     $data = str_replace("\r", "", $data); 

if ($data == "") { 
     $data = "\nno matching records found\n"; 
     } 

header("Content-type: application/vnd.ms-excel; name='excel'"); 
header("Content-Disposition: attachment; filename=exportfile.xls"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 

// output data 
echo $header."\n".$data; 
?> 

рядом, что, как сделать некоторые границы для этой таблицы?

ответ

5

если я хочу: echo ""; который правильное место для положил его, что не может сделать мой скрипт ошибкой?

Если Youre goign сделать это как HTML таблицы, то я бы этого нужно просто выход Лик вы обычно правую таблицу ... Например, вы могли бы сделать:

$rResult = mysql_query($sQuery) or die(); 
$count = mysql_num_fields($rResult); 

$html = '<table border="1"><thead><tr>%s</tr><thead><tbody>%s</tbody></table>'; 
$thead = ''; 
$tbody = ''; 
$line = '<tr>%s</tr>'; 
for ($i = 0; $i < $count; $i++){  
    $thead .= sprintf('<th>%s</th>',mysql_field_name($rResult, $i)); 
} 


while(false !== ($row = mysql_fetch_row($rResult))){ 
    $trow = ''; 

    foreach($row as $value){ 
    $trow .= sprintf('<td>%s</td>', $value); 
    } 

    $tbody .= sprintf($line, $trow); 

} 


header("Content-type: application/vnd.ms-excel; name='excel'"); 
header("Content-Disposition: attachment; filename=exportfile.xls"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 

print sprintf($html, $thead, $tbody); 
exit; 

Youre только получить один потому что вы используете агрегированные функции без предложения GROUP BY. Попробуйте добавить GROUP BY на что-то, что связывает каждую из этих «записей» с определенной группой, например Lot_no или с тем, что вы пытаетесь сообщить.

Что касается границы, вы не можете сделать это с помощью CSV, который, хотя readbale от Excel, на самом деле не является файлом формата Excel со всеми дополнительными функциями, такими как форматирование границ. Чтобы использовать такие вещи, как форматирование, вам нужно вывести собственный Excel или таблицу html, которые можно загрузить в excel. Посмотрите на phpexcel, если вам нужно это сделать.

+0

, если я хочу сделать: эхо "<таблица граница = 1>"; которое правильное место, чтобы поместить его, что не может сделать мой скрипт ошибкой? – klox 2010-11-27 08:09:17

+0

yah ... Я хочу сделать вот так. – klox 2010-11-27 09:38:47

1

Вы на самом деле ничего не вытаскиваете из таблиц. У вас есть только один запрос, и он извлекает информацию заголовка. Запустите sql-оператор, например «select * from tableName», чтобы получить остальное, а затем выполните цикл while и for с этим запросом. PHP/браузеры обычно не работают хорошо за пределами языков программирования, XML и CSV. Я бы посмотрел больше на одну из них. XML читается более новыми версиями excel (и открыт в Internet Explorer в форме XML), в то время как csv более широко используется для совместного использования между различными типами баз данных/электронных таблиц. Для примера вывода XML goto http://www.ibm.com/developerworks/opensource/library/os-phpexcel/index.html и для вывода CSV вам нужно будет использовать функцию fputcsv() для массива. Для справки:

$query = mysql_fetch_row($rResult);//the query of the table 
      // use 'select * from table' to list everything 
$xls = fopen('file.csv', 'a'); //opens document for writing and attempts to create if file does not exist 
foreach ($list as $fields) { 
     fputcsv($fp, $fields); 
} 
fclose($xls); //always close the file when done 

Оба являются грязными способами экспорта, но работают.

1

попробовать этот код он работает для меня:

<?php 
$db_name  = "db_name"; 
$db_password = "pass"; 
$db_link  = mysql_connect("localhost", "root", $db_password); 
mysql_select_db($db_name, $db_link); 
mysql_query("SET NAMES UTF8"); 
$table = "table_name"; 
function assoc_query_2D($sql, $id_name = false){ 
    $result = mysql_query($sql); 
    $arr = array(); 
    $row = array(); 
    if($result){ 
    if($id_name == false){ 
     while($row = mysql_fetch_assoc($result)) 
     $arr[] = $row; 
    }else{ 
     while($row = mysql_fetch_assoc($result)){ 
     $id = $row['id']; 
     $arr[$id] = $row; 
     } 
    } 
    }else return 0; 

    return $arr; 
} 

function query_whole_table($table, $value = '*'){ 
    $sql = "SELECT $value FROM $table"; 
    return assoc_query_2D($sql); 
} 

$export_str = ""; 
$result = query_whole_table($table); 

foreach($result as $record){ 
    $export_str .= implode(";",$record) . "\n"; 
} 
// add time to fileName 
$date = time(); 
file_put_contents($date.'_'.$table."_export.csv", $export_str); 
?> 
Смежные вопросы