2009-08-24 178 views
2

我想將我的sql數據轉換爲csv文件,同時點擊一個按鈕。我發現的用於CSV到CSV轉換的代碼段是在PHP中,我試圖將它轉換爲CakePHP,因爲我在CakePHP中工作。如何在CakePHP中將mysql表格數據轉換爲Excel或CSV格式?

這裏是PHP代碼,我特林轉換:

$result = mysql_query("SHOW COLUMNS FROM ".$table.""); 
$i = 0; 
if (mysql_num_rows($result) > 0) { 
    while ($row = mysql_fetch_assoc($result)) { 
     $csv_output .= $row['Field']."; "; 
     $i++; 
    } 
} 
$csv_output .= "\n"; 

$values = mysql_query("SELECT * FROM ".$table.""); 
while ($rowr = mysql_fetch_row($values)) { 
    for ($j=0;$j<$i;$j++) { 
      $csv_output .= $rowr[$j]."; "; 
    } 
    $csv_output .= "\n"; 
} 

$filename = $file."_".date("Y-m-d_H-i",time()); 
header("Content-type: application/vnd.ms-excel"); 
header("Content-disposition: csv" . date("Y-m-d") . ".csv"); 
header("Content-disposition: filename=".$filename.".csv"); 
print $csv_output; 

解決方案在控制器

功能:

function exporttocsv() 
{  
$this->set('headers',$this->Result->find('all',array('fields'=>'Result.label'))); 
$this->set('values',$this->Result->find('all',array('fields'=>'Result.value')));  
} 

exporttocsv.ctp文件:

<?php 

foreach($headers as $header): 

    $csv_output .=$header['Result']['label'].", "; 

endforeach; 
$csv_output .="\n"; 

if(!empty($values)){ 
foreach($values as $value): 

    $csv_output .=$value['Result']['value'].", "; 

endforeach; 
$csv_output .="\n"; 
} 
else{ 
echo "There is no data to export."; 
} 

$filename = "export_".date("Y-m-d_H-i",time()); 
header("Content-type: application/vnd.ms-excel"); 
header("Content-disposition: csv" . date("Y-m-d") . ".csv"); 
header("Content-disposition: filename=".$filename.".csv"); 

print $csv_output; 

exit; 
?> 
+0

print_r($ result)在這裏非常有用。沒有它,我不知道該告訴你什麼。 – 2009-08-24 05:42:55

回答

4

首先,你不要在Cake的同一個文件中做查詢和輸出。您查詢的數據像往常一樣在控制器,$this->set()結果到視圖,並在視圖你做這樣的事:

foreach ($results as $result) { 
    echo join(', ', $result['COLUMNS']); 
    echo "\n"; 
} 

輸出是這樣的:

value, varchar(25), NO, , , 
submitter, int(11), NO, , , 
... 

由於蛋糕自動換行圍繞您的視圖佈局,您必須set the layout到不同的東西,如'ajax'(這只是一個空的佈局)。

+0

其實我不希望在視圖中的結果..我希望它被轉換爲CSV文件.. 只是爲了檢查值是否正確獲得,我做了在控制器的回聲。 – Angeline 2009-08-24 09:15:34

+1

你**要**在視圖中需要它們。一個視圖只是**輸出**。你的問題中的腳本,它只是產生**輸出**。正如NOSLOW所指出的那樣,您只需通過標題更改瀏覽器如何處理它(頁面或文件下載?)。 – deceze 2009-08-24 10:32:06

+0

你是對的..我改變了你說的代碼。在控制器中查詢並在視圖文件中輸出csv格式的結果以及標題。現在我可以在excel文件中獲得所需的輸出結果。感謝您的指導。 – Angeline 2009-08-25 04:53:20

1

deceze對於從視圖文件輸出結果是正確的。您只需要設置一些標題,以便它在客戶端顯示爲文件下載。你可以簡單地把這些有2個呼叫在您的視圖的頂部:

header("Content-type:application/vnd.ms-excel"); 
header("Content-disposition:attachment;filename=\"{$filename}\""); 

如果你打算在你的應用程序在多個地方做CSV下載,我建議這個助手:

http://bakery.cakephp.org/articles/view/csv-helper-php5

我使用它,它運作良好。

+0

你..你是對的..因爲我只在一個地方做csv下載,我沒有去csv助手..感謝您的支持。 – Angeline 2009-08-25 04:54:30

相關問題