2012-07-16 54 views
-1

我有一些用php編寫的代碼用於將數據從mysql導出到xls,但是我的輸出php出了問題。從PHP中的MySQL數據構建XLS時出現錯誤

這裏的代碼

<?php 
// koneksi database 
$db = "k8665xxxx"; 

mysql_connect("localhost","k866xxx","kixxx"); 
mysql_select_db("$db"); 

$date = date('d-m-Y'); 
$filename = "Data-inquiry-downloaded-$date.xls"; 

// nilai awal counter untuk jumlah data yang sukses dan yang gagal diimport 
$sukses = 0; 
$gagal = 0; 
$table = "promo"; 


//jumlah kolom 
$jkolom=0; 

//generate kolom 
$q= mysql_query("select * from $table where last_update between '$_POST[DariTanggal]' AND '$_POST[SampaiTanggal]'"); 
$r=mysql_fetch_assoc($q); 
foreach ($r as $head=>$nilai) { 
$judul = str_replace("Promo","Inquiry","$head"); 
$header .=$judul."\t"; //print header table 
$jkolom++; 
} 
$header .= "\n"; 

//generate baris 
$result= mysql_query("select * from $table where last_update between '$_POST[DariTanggal]' AND '$_POST[SampaiTanggal]'"); 
while ($row=mysql_fetch_array($result)) { 
for ($x=0; $x<$jkolom; $x++) { 
$content .=$row[$x]."\t"; 
} 
$content .= $row[$x]."\n"; 
} 


$output .= $header.$content; 
header('Content-type:application/ms-excel'); 
header('Content-Disposition: attachment; filename='.$filename); 
echo $output; 

?> 

而這裏的輸出...

622 Joni bekasi 2193850955  4/11/2012     spooring  yani TELP  Bekasi deal 
623 rengko  81383691374 cek distributor komo 4/11/2012     33x12.5x15 ban rosi TELP  DKI Jakarta 
624 Joko Prayitno    4/11/2012     175/65/14 ban rosi EMAIL [email protected] DKI Jakarta 
625 diana Jl.landas pacu timur blok D No.5kemayoran 818772885  4/11/2012 B1603BFF Honda 2009 jazz Rs ban 185/55/R16 ban yani YM [email protected] Jakarta Pusat deal 
626 Indra Jln.Terusan I Gusti NgurahRay Pondok Kopi              
    8129496491  4/11/2012 B8723KF Suzuki 2004 baleno paket dasi paket dasi rosi TELP [email protected] Jakarta Timur deal   
627 ari depok 2128639500 mau konfirmasi lagi  4/11/2012     195/60/15 ban rosi TELP  Depok 

讓我得到的細節,看看數626 ..數據是這樣的

626 Indra Jln.Terusan I Gusti NgurahRay Pondok Kopi              
    8129496491  4/11/2012 B8723KF Suzuki 2004 baleno paket dasi paket dasi rosi TELP [email protected] Jakarta Timur deal   

但是,它一定是...

626 Indra Jln.Terusan I Gusti NgurahRay Pondok Kopi 8129496491  4/11/2012 B8723KF Suzuki 2004 baleno paket dasi paket dasi rosi TELP [email protected] Jakarta Timur deal 

很多我的數據變成這樣..任何人有任何想法我的問題?

回答

1

我猜你在文本中rowbreak在你的數據庫, 在2行像$content .=$row[$x]."\t";,使用str_replace()刪除\n,或使用php:s建立在csv函數(如菲爾)建議。

如果你想建造更復雜的XLS,不只是在CSV數據,你可能需要閱讀有關 「的Excel XML 2003」 -files

$content .= str_replace("\n", " ", $row[$x]) . "\t"; 

更新

或者只是修剪消除所有不必要的空白

$content .= trim($row[$x]) . "\t"; 
+0

沒有..它does not工作..任何想法呢? – 2012-07-16 07:46:22

+0

它探查一些空白,使麻煩,(因爲它不是一個可見的部分) – 2012-07-16 07:50:29

+0

嘿夥計..我解決了它,你只是給我一種方式, – 2012-07-16 07:54:51

2

,而不是試圖建立劃界的數據串,你應該使用內置的功能fputcsv()

例如(有刪節)

header('Content-Type: text/csv'); 
header('Content-Disposition: attachment;filename='.$filename); 
$fp = fopen('php://output', 'w'); 

while ($row = mysql_fetch_row($result)) { 
    fputcsv($fp, $row); 
} 
fclose($fp); 
+1

+1告訴人們使用內置函數而不是試圖重新創建它(壞)自己 – 2012-07-16 07:57:43

+0

@MarkBaker謝謝,它沒有幫助,但這次:( – Phil 2012-07-16 08:00:34

相關問題