2010-11-27 89 views
0

我有一些用於將MYSQL表導出爲Excel格式的PHP腳本,但是在導出表後我遇到了一些問題。從db獲得的數據只顯示一行。將MYSQL表導出爲ex​​cel

這下面的腳本:

$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表格,然後我將僅僅指剛輸出liek你通常右表...例如,你可以做:

$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; 

特殊照顧只得到一個行,因爲您使用的聚合函數沒有GROUP BY子句。嘗試添加一個GROUP BY,以便將這些「條目」中的每一個與「Lot_no」之類的特定組或任何想要報告的內容相關聯。

至於邊界,你不能這樣做CSV雖然readbale由Excel,實際上並不是一個Excel格式文件與所有額外的格式爲邊界。要使用格式化等內容,您需要輸出本機Excel或可以加載到Excel中的html表格。如果你需要這樣做,請看phpexcel

+0

:回聲 「<表邊框= 1>」;哪個正確的地方,它不能讓我的腳本成爲錯誤? – klox 2010-11-27 08:09:17

+0

耶...我想這樣做。 – klox 2010-11-27 09:38:47

1

你實際上並沒有從表中拉出任何東西。您只有一個查詢,它正在拉取標題信息。運行一個像「select * from tableName」那樣的sql語句來獲取剩餘的內容,然後對該查詢執行while和for循環。 PHP /瀏覽器通常不能很好地運行編程語言,XML和CSV之外的項目。我會更加關注這兩者中的任何一個。新版本的Excel可以讀取XML(並且可以在Internet Explorer中以XML格式打開),而csv更廣泛地用於在不同類型的數據庫/電子表格之間共享。有關XML輸出的一個示例,您將不得不在數組上使用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); 
?>