2
<?php
    // DB Connection here
    mysql_connect("localhost","root","");
    mysql_select_db("hitnrunf_db");

    $select = "SELECT * FROM jos_users ";
    $export = mysql_query ( $select ) or die ( "Sql error : " . mysql_error( ) );
    $fields = mysql_num_fields ( $export );

    for ( $i = 0; $i < $fields; $i++ )
    {
        $header .= mysql_field_name( $export , $i ) . "\t";
    }

    while( $row = mysql_fetch_row( $export ) )
    {
        $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 = "\n(0) Records Found!\n";
    }

    header("Content-type: application/octet-stream");
    header("Content-Disposition: attachment; filename=your_desired_name.xls");
    header("Pragma: no-cache");
    header("Expires: 0");
    print "$header\n$data";
?>

上記のコードは、MySQLデータベースからExcelスプレッドシートを生成するために使用されますが、次のエラーが発生します。

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

問題は何ですか?どのように修正しますか?

4

7 に答える 7

5

実際に Excel ファイルを生成しているわけではありません。タブをセパレータとして使用して、.csv ファイルに相当するものを生成しています。

「実際の」Excel ファイルを生成するには、PHPExcelを使用します。

于 2010-04-26T16:01:31.643 に答える
1

問題は、Excelが.xlsで終わるファイルを検出すると、そのファイルがBIFF標準に準拠していることを期待していることです。コードはBIFF準拠のファイルを生成しません。必要に応じて、BIFF準拠のファイルを生成するPHP関数を提供できますが、ここに投稿するには長すぎます。

于 2010-04-26T13:28:31.997 に答える
1

タブで区切られたフィールドを含むファイルを生成しているようで、ヘッダーで、これがバイナリExcelスプレッドシートが使用するのと同じ形式であると主張しています。これはExcelが使用する形式ではありません。そして、スプレッドシートをロードするプログラムは、あなたが誤解を招く人々、おそらくあなた自身であることをあなたに知らせています。

おそらく、CSVファイルなどのエクスポート形式の使用を検討する必要があります。タブ区切りからコンマ区切りへの変換は難しくありません。

于 2010-04-26T13:29:27.603 に答える
0

PEAR(PHP拡張およびアプリケーションリポジトリ)Spreadsheet_Excel_Writerを試してください。これを使用して、BIFF形式のExcelファイルを生成します。

于 2010-05-03T04:25:26.873 に答える
0

プログラムは.xls、出力しているものとはまったく異なる標準ドキュメントを探しています。プログラムは、.txtファイルであるタブ区切りシートを出力します。プログラムをタブから区切り文字としてのコンマに切り替えて、.csv(コンマ区切り値)として保存してみてください。

于 2010-05-03T04:33:52.927 に答える
0

タブ区切りファイルを作成するだけなら、PHP をスキップして、MySQL に任せてみませんSELECT INTO OUTFILEか?

PHPはダウンロード部分を処理できます。Content-type ヘッダーを text/plain に設定します。Excelはそれを開く方法を知っています。

于 2010-04-26T16:05:48.553 に答える
0

純粋な CSV を使用するようにコードを変更し、.csv で終わるファイル名とコンテンツ タイプ text/csv としてファイルをブラウザに返します。

以前にこれを試みた人を見たことがありますが、特定のバージョンの Office Excel でしか機能しません。他のスプレッドシート プログラムまたはすべてのバージョンの Excel を使用する他のプラットフォームでは機能しません。標準のファイル形式を使用するか、少なくともファイルをそのファイル タイプとしてブラウザに送信する場合に、Excel が期待する方法で XLS データを含む適切な OLE2 複合ドキュメント ファイルを生成します。

于 2010-04-26T16:12:11.397 に答える