2010-11-27 17 views
0

エクスポートMYSQLテーブル用のPHPスクリプトがExcel形式になっていますが、テーブルをエクスポートした後に問題が発生します。 dbから取得するデータは、1行しか表示しません。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のは、HTMLテーブルとしてそれを行うにはgoign場合

それから私は、たとえば、あなたが行う可能性があります...あなたliek通常は右の表を出力しjsutます:

$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節のない集計関数を使用しているからです。これらの「エントリ」をLot_noなどの特定のグループや、報告しようとしているものに結びつけるものにGROUP BYを追加してみてください。

境界線までは、CSVでこれを行うことはできませんが、これはExcelによる読み込みは実際には枠の書式設定のようなすべての機能を持つExcel形式ファイルではありません。書式設定のようなものを使うには、ネイティブExcelやExcelに読み込むことができるhtmlテーブルを出力する必要があります。あなたがそれを行う必要がある場合はphpexcelを見てください。

+0

私が何をしたい場合: "<テーブルのボーダー= 1>" エコー;それを置く正しい場所は、私のスクリプトがエラーになるのを防ぐことができない? – klox

+0

yah ...私はこれのようにしたい。 – klox

+0

+1問題を特定し、タブで区切られた値ファイルではなく、実際のExcelファイルを生成するためのPHPExcelを参照するためのものです。 –

1

実際にテーブルから何かを引き出しているわけではありません。 1つのクエリしかなく、ヘッダー情報を取得しています。 "select * from tableName"のようなSQL文を実行して残りの部分を取得し、そのクエリでwhileループとforループを実行します。 PHP /ブラウザは通常、プログラミング言語、XML、およびCSV以外の項目ではうまく動作しません。私はそれらのいずれかに向かってもっと見るだろう。 XMLはExcelの新しいバージョン(XML形式のInternet Explorerで開くことができます)で読み込み可能ですが、csvはさまざまな種類のデータベース/スプレッドシート間で共有するために広く使用されています。 XML出力goto http://www.ibm.com/developerworks/opensource/library/os-phpexcel/index.htmlの例では、CSV出力の場合、配列に対してfputcsv()関数を使用する必要があります。 Examplleの場合:

$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

+1 phpexcelのために、それはPHPでExcelのドキュメントを扱うためのかなり固体のライブラリです。 –

+0

thatsいいアイデアです。しかし、私はスクリプトで遊びたいだけです:) – klox

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); 
?> 
関連する問題