2009-06-10 8 views
2

私はPHPの専門家ではありませんが(単なる初心者ですが)助けが必要です!mySQLをexcelまたはcsvにエクスポート

Googleを検索して約100種類のスクリプトを試してみた結果、私は最終的に私が必要とするものをほとんど見つけ出した。

基本的に私のサイトには「Excelにエクスポート」というボタンがあります。訪問者のサイトクリックボタンをクリックすると、指定されたテーブルのすべてのデータがダウンロードされ始めます。

私はここにこれを見つけた - ファイルを開こうとしたとき、私は、ユーザー以外たいまさにんPHP code to convert a MySQL query to CSV

は、次のエラーを見ている:

エラー - 「あなたがしようとしているファイル'export.xls'はファイル拡張子で指定されている形式とは異なる形式です。ファイルを開く前に、ファイルが破損しておらず、信頼できるソースからのものであることを確認してください。今すぐファイルを開きたいのですか?

ユーザーは「はい」をクリックし、すべてのデータを含むファイルが開きます!ブリリアント!ただし、ユーザーはこのエラーでファイルを開くことはありません。

誰かがこれを修正する方法を知っていれば、私は非常に感謝しています。

感謝

TT

+0

は、オフィス2007を使用しているユーザーですか?ヘッダー( "ContentType:application/vnd.ms-excel")を試しましたか? – Perpetualcoder

+0

@TheTubこの同じ問題を扱う別のスレッドについては、http://stackoverflow.com/questions/976483/exporting-gridview-to-excel-in-web-app/976566#976566を参照してください。 –

+0

- はい、ヘッダーに既にコンテンツタイプが記載されています。 – TheTub

答えて

5

または、上記のソリューションでスクリプトを変更して、.csv拡張子のファイルを返すことができます。 .csvファイルはExcelに関連付けられているため、直接開く必要があります。

+0

+1 ...私はこれを言うためにここに来ました。か何か。 – Adrien

+0

+1 ...アドリエンは言った。 – Abinadi

+0

こんにちはJeff - これは動作し、エラーメッセージを取り除きますが、ファイルはテーブルのデータを分割します(タイプは9行、90行です)。 1フィールドは3000文字で、これはまったく気に入らないようです。 .xlsとしてエクスポートされた場合、少なくともデータは使用可能な表形式で保存されます。 – TheTub

2

[OK]を、これは拡張硬化と呼ばれるExcel 2007ではにより指定された機能に起因します。それをオフにすることはできますが、クライアント側でのみ行うことができます。 「OK」または「はい」をクリックすると、ファイルはとにかく開くはずです。詳細については、this blog postをご確認ください。

EDIT:これは、ファイル拡張子で指定されているファイルとは異なる種類のファイル(HTMLまたはCSVなど)をExcelが検出していることを意味します。したがってExcelは、このファイルはそれが何であるかとは違うと警告したいと考えています。サーバー上にネイティブのExcelファイルを作成し、ユーザーにダウンロードを促す場合を除き、各ユーザーが自分のコンピューターで拡張機能を無効にすることを除いて、このエラーを回避することはできません。

+0

ありがとう - これは、エラーメッセージを説明します。下のJeffのソリューションを調べて、データが.csvファイルにうまく収まるかどうかを調べることができます。 – TheTub

0
Dim objXL As Excel.Application 
Dim objWkb As Excel.Workbook 
Set objXL = New Excel.Application 
'turn off excel warnings 
objXL.DisplayAlerts = False 
'Open the Workbook 
Set objWkb = objXL.Workbooks.Open(fpath) 
0
functions sendFile($filename,$content_type="application/ms-excel") { 
    header('Content-type: '.$content_type); 
    header('Content-disposition: Attachment; filename=' . $filename); 
    readfile($filename); 
} 
1

テキストファイルエクセルの「ID」最初の文字を作る場合は、誤って あなたがSYLKファイルを開こうとしている前提としています。

最初の行が&の列の値が "ID"の場合、Excelはこの警告をスローします。 「ID」から他のものに変更してください。

クレジット:私は次のリンクを見て、私は同じ問題を抱えていたhttp://alunr.com/excel-csv-import-returns-an-sylk-file-format-error/

0

PHP code to convert a MySQL query to CSV

私はヘッダーが仕事を得るために答えの1を変更しました。

include('DBFILE.PHP'); 
$select="SELECT * FROM SOMETable"; 


$result = mysqli_query($conn, $select); 
if (!$result) die('Couldn\'t fetch records'); 
$num_fields = mysql_num_fields($result); 

//This is what I changed... 
$headers =""; 
while ($property = mysqli_fetch_field($result)) { 
    $headers.= $property->name.","; 
} 
$headers.="\n"; 
////// 

$fp = fopen('php://output', 'w'); 
if ($fp && $result) { 
    header('Content-Type: text/csv'); 
    header('Content-Disposition: attachment; filename="export.csv"'); 
    header('Pragma: no-cache'); 
    header('Expires: 0'); 
    fputcsv($fp, $headers); 
    while ($row = $result->fetch_array(MYSQLI_NUM)) { 
     fputcsv($fp, array_values($row)); 
    } 
    die; 
} 

私はこれをテストし、それが魔法のように動作し、あなたは自分のDB接続を追加したり、あなたが持っているをdb.phpファイルをインクルードする必要があります。

あなたは

header('Content-Disposition: attachment; filename="export.csv"'); 

今まであなたが好きな名前を付けるものに変更して輸出を次の行を編集する場合は、ファイルの名前を変更することができます。

関連する問題