ホームページ  >  記事  >  バックエンド開発  >  PHPでExcelファイルを読み取る方法

PHPでExcelファイルを読み取る方法

巴扎黑
巴扎黑オリジナル
2016-11-29 09:57:421562ブラウズ

PHP で EXCEL を読み取るには 3 つの一般的に使用される方法があり、それぞれに独自の長所と短所があります。個人的には、プラットフォーム間で使用できる 3 番目の方法をお勧めします。

1. .csv 形式で読み取ります

.xls を .csv テキスト形式に変換し、PHP を使用してファイルを分析します。これは、PHP によるテキストの分析と変わりません。

利点: クロスプラットフォーム、比較的効率が高く、読み取りと書き込みが可能です。

欠点: .csv ファイルを直接使用することしかできません。.xls バイナリ ファイルを受け入れることが多い場合は、手動で変換する必要があり、自動化することはできません。 1 つのファイルに存在する SHEET は 1 つだけです。

PHP には独自の分析 .csv 関数があります: fgetcsv

array fgetcsv ( int $handle [, int $length [, string $delimiter [, string $enclosure]]] )

handle は fopen()、popen で構成されます() または fsockopen() によって生成された有効なファイル ポインター。

length (オプション) は、CVS ファイル内の最長の行より大きくなければなりません。このパラメータは、PHP 5 ではオプションです。このパラメータを省略した場合(PHP 5.0.4 以降のバージョンでは 0 に設定)、長さに制限はありませんが、実行効率に影響する可能性があります。

delimiter (オプション) フィールドの区切り文字を設定します (1 文字のみ使用可能)。デフォルト値はカンマです。

囲み (オプション) フィールドの折り返し文字を設定します (1 文字のみ使用可能)。デフォルト値は二重引用符です。このパラメータは PHP 4.3.0 で追加されました。 fgets() と似ていますが、 fgetcsv() は読み取った行を解析し、CSV 形式でフィールドを見つけて、それらのフィールドを含む配列を返します。

fgetcsv() は、ファイルの終わりに達した場合など、エラーが発生した場合に FALSE を返します。

注: CSV ファイル内の空行は、単一の null フィールドを含む配列として返され、エラーとして扱われません。

もちろん、文字列を自分で手動で分析することもできます。



fputcsv 関数を使用して行を CSV にフォーマットし、ファイル ポインターを書き込むこともできます。

2. ODBC リンクされたデータソース

利点: 複数の形式、CVS、XLS などをサポートします。読み取りと書き込みをサポートし、標準 SQL 言語を使用し、SQLSERVER および MYSQL データベースとほぼ同じです。

欠点: Windows サーバーをサポート

3. PHP カスタム クラス

利点: クロスプラットフォーム。一部のクラスは書き込み操作をサポートします。 .xls バイナリ ファイルをサポートします

一般的に使用されるクラスには、phpExcelReader と PHPExcel が含まれます。後者は読み取りと書き込みをサポートしますが、php5.2 以降が必要です。

phpExcelReader は、ファイルを読み取るために特別に使用されます。テーブルのすべての内容を含む配列を返します。

このクラスで使用するメソッドについては、Webサイトからダウンロードした圧縮ファイル内のexample.phpを参照してください。

しかし、私がそれをダウンロードしたとき (バージョン 2009-03-30)、注意すべき点が 2 つあります:

reader.php 次の行を変更する必要があります

Change require_once 'Spreadsheet/Excel/Reader/OLERead.php' ;

require_once 'oleread.inc' に変更します。

example.php の $data->setOutputEncoding('CP1251'); 'cells'][$row][$col]));

は $table_output[$sheet] .= nl2br(htmlspecialchars($data-> シート[$sheet]['cells'][$row][ $col]));

そうでないと中国語に問題が発生します。

繁体字中国語の場合は CP950、日本語の場合は CP932 に変更できます。詳細については、コードページの説明を参照してください。

$data->read(’jxlrwtest.xls’) を独自の Excel ファイル名に変更すると、zip ファイルに添付されている jxlrwtest.xls が壊れるはずです。

これはダウンロード アドレスです:

phpExcelReader: http://sourceforge.net/projects/phpexcelreader/

PHPExcel: http://www.codeplex.com/PHPExcel/Wiki/View.aspx?title=Documents&referringTitle=ホーム

プログラムを作成するときに、バックグラウンドで大量のデータをデータベースにインポートする必要がある場合があります。たとえば、コンピューターのテストのスコアの照会や電話帳のデータなどは、通常、Excel に保存されます。データを csv ファイルにエクスポートし、次のコマンドを使用します。プログラムはバックグラウンドでデータをデータベースにバッチ インポートできます。

以下はプログラムのメイン部分です:


//時間取得関数を定義します
function getmicrotime(){
list($usec, $sec) =explode(" ",microtime() );
return ((float)$usec + (float)$sec);
$time_start = getmicrotime();/ /データベースに接続します
$db=new testcsv;
$handle = fopen ("test.csv","r");$sql="scores(idcard,names,num,sex,nation,score) に挿入 value(";
while ($data = fgetcsv ($handle, 1000, ",")) {

$num = count ( $data);
for ($c=0; $c < $num; $c++) {
if($c==$num-1){$sql=$sql.$data[$c]。 )";break;}
$sql=$sql.$data[$c].","; 
}
print "
"; 
echo $sql."
"; 
$db->クエリ($sql); 
echo "句sql语実行成功!
"; 
$sql="scores(idcard,names,num,sex,nation,score) に挿入 value(";
}
fclose ($handle);
$time_end = getmicrotime();
$time = $time_end - $ time_start;
echo "程序実行時間:".$time."秒";

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。