Do You PHP?    
Search Engine Optimization  php5 powerd  Valid XHTML 1.0!  Valid CSS!  このサイトのはてなブックマーク数 



last updated
2003/06/05

counter hits
since 1999/11/06


Excelファイル形式でのデータダウンロード

alertここにある情報はかなり古くなっており、正しくなくなっている可能性があります。掲載しているサンプルコードiなどは、最新のPHPでは動作しない、もしくは、別途設定・調整が必要になるかも知れません。情報を鵜呑みにせず、あなたの手を動かして、あなたの目で確認してください。

zip形式 tgz形式

cautionSpreadsheet_WriteExcelは「Spreadsheet_Excel_Writer」としてPEARにも取り込まれており、PHPClassesのSpreadsheet_WriteExcelのメンテナンスは終了している、という情報があります。Excelファイル形式でのデータダウンロード(PEAR版)にもまとめました。

何らかのファイルフォーマットでデータをダウンロードさせる、という用件は結構ありますね。以前(かなり前だ。。。)はCSV形式でのサンプルを作ってみましたが、ここではSpreadsheet_WriteExcelHeaderクラスを使ってExcelファイルを作成し、ダウンロードさせるサンプルを作ってみました。。。というより、php-usersに流れたネタをなぜか思い出してしまい、自分で試した時のまとめです(^-^;

このSpreadsheet_WriteExcelHeader。元々はPerlで記述されたSpreadsheet::WriteExcelというのがあり、そのPHP版のようです。重松さんのページにPHP+Excelの情報がまとめられています。

セットアップ手順は、PHP Classesのページからwrite_excel-2003-05-05.tar.gzをダウンロードし、require_once関数で読込可能なディレクトリに展開するだけです。

さて、サンプルスクリプトの方ですが。。。ほとんどCSVの時と同じような感じで、データを出力する時の処理が若干違うだけです。まあ、同じ事やってるので当然なんですが。。。(^-^; あとは、日本語の扱いを間違わなければ、かなりお手軽にExcelファイルを作成することができます。ちょっと(だけ)感動。

●PHPスクリプトの一部

<?php
          :

    /**
     * ワークブック(ファイル)の作成。
     * ファイル名に「-」を指定すると、標準出力に結果を出力する
     */
    $workbook = new Workbook("-");

    /**
     * ワークシートの追加
     */
    $worksheet =& $workbook->add_worksheet($tablename);

    /**
     * 行番号の初期化
     */
    $excelrow = 0;

    /**
     * Oracleからデータを取得する
     */
    $conn = OCILogon("scott", "tiger", "orcl");
    $stmt = OCIParse($conn,"SELECT * FROM emp ");
    OCIExecute($stmt);
    $ncols = OCINumCols($stmt);

          :

    /**
     * データの出力
     * PHPスクリプトがshift_jisでない場合、日本語はshift_jisに変換
     * する必要がある
     */
    while(OCIFetch($stmt)) {
        $excelrow++;
        for ( $i = 1; $i <= $ncols; $i++ ) {
            $worksheet->write(
                $excelrow, ($i - 1),
                mb_convert_encoding(
                    OCIResult($stmt, OCIColumnName($stmt,$i)), "sjis"));
        }
    }

          :
?>

[2003/06/05] フォントの変更ですが、オリジナルのPerl版と異なり、アクセサ(Format->set_font())が用意されていないようです(2003/06/05現在、PEAR版でもアクセサは用意されていません)ので、Formatクラスのメンバー変数「$font」にフォント名を直接代入します。日本語を含むフォント名の場合は、shift_jisに変換する必要があります(MS-Excel 2000で確認)。

●フォントの変更

<?php
          :

    /**
     * データヘッダの出力
     */
    $format =& $workbook->add_format();
    $format->font = mb_convert_encoding("MS ゴシック", "shift_jis");

          :
?>



About This Site |  Privacy Policy |  Contact
Copyright © 1999 - 2003 by Hideyuki SHIMOOKA all rights reserved.