如何在CakePHP中将mysql表格数据转换为Excel或CSV格式?

我想将我的sql数据转换为csv文件,同时点击一个button。 我发现的CSV到CSV转换的代码片段是在PHP中,我试图将它转换为CakePHP,因为我在CakePHP中工作。

这里是我要转换的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("Ym-d_H-i",time()); header("Content-type: application/vnd.ms-excel"); header("Content-disposition: csv" . date("Ymd") . ".csv"); header( "Content-disposition: filename=".$filename.".csv"); print $csv_output; 

控制器中的function:

 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("Ym-d_H-i",time()); header("Content-type: application/vnd.ms-excel"); header("Content-disposition: csv" . date("Ymd") . ".csv"); header("Content-disposition: filename=".$filename.".csv"); print $csv_output; exit; ?> 

首先,你不要在Cake中做相同的文件查询和输出。 您可以像往常一样在Controller中查询数据, $this->set()将结果添加到视图中,并在视图中执行如下操作:

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

输出这样的东西:

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

由于Cake自动将布局封装在视图中,因此必须将布局设置为不同的内容,如'ajax' (简单地为空布局)。

欺骗是正确的输出结果从视图文件。 您只需要设置一些标题,以便在客户端显示为文件下载。 您可以简单地将这两个电话放在您的视图顶部:

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

如果你打算在你的应用程序的多个地方做csv下载,我会推荐这个帮手:

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

我使用它,它运作良好。