ホームページ  >  記事  >  バックエンド開発  >  Yii2 は PHPExcel を使用して Excel を読み取ります

Yii2 は PHPExcel を使用して Excel を読み取ります

WBOY
WBOYオリジナル
2016-08-08 09:22:041537ブラウズ

個人的に使用するときは、後で参照できるように PHPExcel の使用経験を保存します。
PHP の Yii フレームワークと組み合わせると、簡単に使用できます。また、Yii の自動ロード ファイルやインターネット上で言及されているその他の方法を変更する必要はありません。
具体的な使用方法:
phpoffice をダウンロードします http://phpexcel.codeplex.com/releases/view/119187
ダウンロード後の最初のレベルのディレクトリ構造は、Classes、Documentation、Examples、changelog.txt、install.txt、license.txt です。
ダウンロード 最後に、Yii に PHPExcel をロードさせます。lele は yii2-swiftmailer のロード方法を模倣し、プロジェクトのルート パスの下にあるcomposer.jsonを変更し、「phpoffice/phpexcel」:「dev-develop」を「require」に追加します。 、そして、コマンドを使用します ルートディレクトリに入り、composer updateを実行します(phpexcelを手動でダウンロードする必要はないようです、composerは自動的にダウンロードします...) 完了後、 $PHPExcel = new PHPExcel( ); PHP でインスタンスを取得します。新しいものを追加するときにそれを追加する必要があることに注意してください。そうしないと、クラスが見つからないというエラーが表示されます (lele には、なぜそれを追加する必要があるのか​​わかりません) 知っている人がいたらコメントで教えてください。)
OK、動作したら、使用方法のコードを記述します:
$filePath = "../file/test.xlsx"; // 読み取るファイルのパス
$PHPExcel = new PHPExcel();例にして後で使用してください
$PHPReader = new PHPExcel_Reader_Excel2007(); // Reader は非常に重要で、Excel ファイルを読み取るために使用されます
if (!$PHPReader->canRead($filePath)) { // Reader はここで使用されますファイルを読み込みます。07 が機能しない場合は、05 を使用します。05 が機能しない場合は、エラーが報告されます。ここでの return は Yii フレームワークの方法であることに注意してください。
$PHPReader = new PHPExcel_Reader_Excel5();
if (!$PHPReader->canRead($filePath)) {
$errorMessage = "ファイルを読み取れません。";
return $this->render('error', ['errorMessage' => $errorMessage]);
}
}
$PHPExcel = $PHPReader->load($filePath); // Reader がそれを読み込んだ後、Excel インスタンスにロードします
-*-*- *- *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- *- *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
Excelを読むには上記だけで十分です、以下で調べてみましょう。 この 2 次元のテーブルを出力します。 PHPExcel のメソッド名は比較的セマンティックです。
$allSheet = $PHPExcel->getSheetCount(); // シート数
$currentSheet = $PHPExcel->getSheet(0); // 最初のシート (ワークブック?) を取得します
$allColumn = $currentSheet -> ;getHighestColumn(); // AU などの最上位の列。列は A
$allRow = $currentSheet->getHighestRow(); // 最大の行、たとえば 0
$ から始まります。 result = new ReadFileResult(); // result は結果を保存するために自分で書いたエンティティ クラスです
for ($currentRow = 1; $currentRow echo $currentRow;
$lineVal = [ ] ;
for ($currentColumn="A"; $currentColumn $val = $currentSheet->getCellByColumnAndRow(ord($currentColumn) - 65, $currentRow)->getValue ( ); // ord は文字を ASCII コードに変換します。A->65、B->66.... ここでの落とし穴は、AU->65 の場合、次の U が計算されないため、インデックス メソッドを使用してトラバースすることです。不良品です。
array_push($lineVal, $val);
}
array_push($result->content, $lineVal);
}
開発ドキュメントを見ると、非常に便利なトラバーサル メソッドが 2 つあることがわかりました。
まず、toArrayを使ってこのシートを二次元配列に変換します。
$currentSheet->getStyle('A2:A6')->getNumberFormat()->setFormatCode('yyyy-mm-dd') // A2 から A6 までの時刻形式に変換します
$result-> ; content = $currentSheet->toArray('', true, true); //現在のシートを 2 次元配列に変換します
次に、PHPExcel に付属の行と列のイテレーターを使用します。これはより安全になります。
foreach ($currentSheet->getRowIterator() as $row) { // 行イテレータ
$cellIterator = $row->getCellIterator(); // 行内のセルイテレータを取得します
$cellIterator-> setIterateOnlyExistingCells( false); // セルに値がない場合でも、すべてのセルを走査するようにセル反復子を設定します
$lineVal = [];
foreach ($cellIterator as $cell) {
if ($cell->getDataType() = = PHPExcel_Cell_DataType::TYPE_NUMERIC) { // セルのデータ型が数値かどうかを比較します
$cellStyleFormat = $cell->getStyle( $cell->getCooperative() )->getNumberFormat() / / 次の 2 つの文は、この数値の形式を取得するためのものです
$formatCode = $cellStyleFormat->getFormatCode(); // 通常の数値の場合、formatCode は General になります。 91 年 6 月 12 日 12:00、FormatCode は /d/yy h: mm になります (とにかく、時刻の形式です)
echo $ cell-& gt; $ formatcode "& lt; ;";
if (preg_match ("/m /d/yy h:mm/i", $formatCode)) {
$value = gmdate("Y-m-d H:i:s", PHPExcel_Shared_Date::ExcelToPHP($cell- >getValue())); // ここで、形式に従って Excel 時間を PHP に変換します
} else {
gt;getValue();
}
列の座標を取得します
cell->getColumn ());
}
array_push($result->content, $lineVal);
}
lele は、yanhui_wei の記事から PHPExcel のクラスとメソッドの概要を読みました。特別な抜粋:

について。一般的な Excel レポート操作では、次のクラス ライブラリを習得する必要があります:
(1) PHPExcel: ワークブック オブジェクト
Excel ドキュメント処理オブジェクトは主に Excel ドキュメントを管理するために使用されます。その方法 管理 (プロパティとメソッドを通じて管理)?ご存知のとおり、クラスは主に属性とメソッドで構成されます。PHP プログラムによる Excel ドキュメントの管理は、実際にはこのオブジェクトの属性とメソッドによって行われます。これらのプロパティを見てみましょう。およびメソッドは主に Excel ドキュメントのこれらの側面を管理するために使用されます
getProperties(): 現在アクティブなワークシートのプロパティ オブジェクトを取得し、プロパティ オブジェクトを返します
getActiveSheet(): 現在アクティブなワークシートを取得し、ワークシート オブジェクトを返します
getActiveSheetIndex() : 現在アクティブなワークシートのインデックス値を取得し、int を返します
setActiveSheetIndex(): 現在アクティブなワークシートのインデックスを設定し、ワークシート オブジェクトを返します
getSheetByName(): ワークシート名を通じて現在のワークシート オブジェクトを取得し、Worksheet オブジェクトを返します
getDefaultStyle(): Excel ドキュメントのデフォルトのスタイル (すべてのワークシートのスタイル) を取得し、スタイル オブジェクトを返します
createSheet(): 現在アクティブなワークシートの後に新しいワークシートを作成します
getSheetCount(): Excel ドキュメントの数を取得しますint
getSheetNames(): Excel ドキュメント内のすべてのワークシート名の配列を取得します
(2) PHPExcel_Worksheet: Worksheet オブジェクト
Worksheet オブジェクト。主にワークシートの管理に使用されます。管理方法は?プロパティやメソッドでも管理されますが、ほとんどの場合、ワークシート オブジェクトは Excel ドキュメント オブジェクトを通じて取得できます
toArray(): ワークシート内のデータを配列に変換します
fromArray(): 配列からデータを取得し、作業テーブルに入力し、ワークシート オブジェクトを返します
getCell(): セル オブジェクトを取得します
getCellByColumnAndRow(): 列インデックスと行インデックスを通じて指定されたセルを取得し、セル オブジェクトを返します
getDefaultStyle(): デフォルトのスタイルを取得しますワークシートのスタイルオブジェクトを返します
getHighestColumn(): ワークシートの最大の列を取得し、列の名前を返します
getColumnDimension(): 現在の列を取得します
getStyle(): 指定されたセルのスタイルを取得します、returnスタイルオブジェクト
getParent(): 親クラスオブジェクトを取得し、Excel ドキュメントオブジェクトを返します
getTitle(): ワークシートのタイトルまたは名前を取得し、文字列型を返します
setCellValue(): セルの値を設定し、ワークシート オブジェクトまたはセル オブジェクトは、パラメーターの値に完全に依存します
setCellValueByColumnAndRow() : 列インデックスと行インデックスを通じてセルの値を設定します。戻り値の型は上記と同じです
setCellValueExplicit(): の値を設定しますセルを取得し、指定されたデータ型を表示し、ワークシート オブジェクトを返します
setCellValueExplicitByColumnAndRow(): 列と行のインデックスでセルを設定します Value
setTitle(): ワークシートのタイトルを設定します
(3) PHPExcel_Cell: セル オブジェクト

(4) PHPExcel_Style : スタイル オブジェクト。主にセルのスタイルを設定するために使用されます。配置、フォント、境界線、パディングなど。配置、フォント サイズ、境界線の色を設定したい場合は、以前に学習した CSS スタイルと似ています。など、ここではすべてスタイル オブジェクトを通じて行われます。 getActiveCell(): 現在アクティブなセルの名前を取得し、文字列を返します。 たとえば、A1
getActiveSheet(): 現在アクティブなワークシートを取得し、ワークシート オブジェクトを返します。 getAlignment(): 配置オブジェクトを取得し、配置オブジェクトを返します
getBorders(): 境界線オブジェクトを取得し、境界線オブジェクトを返します
getFill(): 塗りつぶしオブジェクトを取得します
getFont(): フォント オブジェクトを取得します
setFont():フォントを設定し、スタイルオブジェクトを返す
(5) PHPExcel_Style_Alignment: 配置オブジェクト
gethorizo​​ntal(): 水平方向のセンタリングメソッドを取得する
getVertical(): 垂直方向のセンタリングメソッドを取得する
sethorizo​​ntal(): 水平方向のセンタリングメソッドを設定し、配置を返すオブジェクト
setVertical(): 垂直方向のセンタリング メソッドを設定し、配置オブジェクトを返す
センタリング メソッド:
HORIZONTAL_CENTER
HORIZONTAL_CENTER_CONTINUOUS
HORIZONTAL_GENERAL
HORIZONTAL_JUSTIFY
HORIZONTAL_LEFT
HORIZONTAL_RIGHT
VERTICAL_BOTTOM
VERTICAL_CENTER
VERTICAL_JUSTIFY
VERTICAL_TOP
(6) PHPExcel_Style_Font: フォント オブジェクト
setBold (): フォントの太字を設定
setColor(): フォントの色を設定
setItalic(): フォントの傾きを設定
setName(): フォント名を設定
setSize(): フォントサイズを設定
setUnderline(): フォントの下線を設定
(7 ) PHPExcel_Writer_Excel5: 書き込み操作オブジェクト、主に xls ファイルの出力に使用されます
save (ワークブック ファイル名): ワークブック オブジェクト内のデータをワークブック ファイルに保存します
(8 ) PHPExcel_Writer_Excel2007: 書き込み操作オブジェクト、主に xlsx ファイルの出力に使用されます
save (ワークブックファイル名): ワークブックオブジェクト内のデータをワークブックファイルに保存します
(9) PHPExcel_Reader_Excel5: 読み取り操作オブジェクト、主に入力xlsファイルに使用されます
canRead(): 現在のリーダーオブジェクトがワークブックファイルを読み取ることができるかどうか
load (): ワークブックファイルからワークブックオブジェクトをロードします。つまり、ワークブックファイル内のデータをワークブックオブジェクトにロードして管理します
(10) PHPExcel_IOFactory: 読み取りおよび書き込み操作オブジェクト
createReader(): に従って異なる読み取りオブジェクトを作成しますさまざまなパラメーター: 主な機能は、ワークブック ファイル内のデータを読み取ることです
createWriter(): さまざまなパラメーターに従って、さまざまな書き込みオブジェクトを返します オブジェクト: 主な機能は、PHPExcel ワークブック オブジェクト内のデータをワークブック ファイルに書き込むことです
load( ): PHPExcel ワークブック オブジェクトをワークブック ファイルからロードします。つまり、ワークブック ファイル内のデータを PHPExcel ワークブックにロードします。 管理するオブジェクト
PHPExcel オブジェクト: ワークブック オブジェクトです
include_once "PHPExcel/Writer/Excel5.php"; //主に他の下位バージョンで使用され、ファイル名のサフィックスはxlsです。xls形式のExcelファイルの場合、このようなライブラリを導入することをお勧めします
include_once "PHPExcel/Writer/Excel2007. php";//主にexcel2007形式で使用され、ファイル名の拡張子はxlsx Excelファイルです。拡張子がxlsx形式のExcelファイルExcelファイルを生成したい場合は、そのようなライブラリを導入することをお勧めします
$objWriter = new PHPExcel_Writer_Excel5($ objExcel);//ファイル形式書き込みオブジェクトのインスタンスを作成します。このオブジェクトは主に、他のボードで使用される拡張子名が xls 形式の Excel ファイルにコンテンツを書き込むなど、指定された形式でファイルにコンテンツを書き込むために使用されます。フォーマット
$objWriter = new PHPExcel_Writer_Excel2007($objExcel);//ファイル形式書き込みオブジェクト インスタンスを作成します。このオブジェクトは主に、接尾辞名が xls 形式の Excel ファイルにコンテンツを書き込むなど、指定された形式でファイルにコンテンツを書き込むために使用されます。 、など、excel2007 形式に使用されます
$objWriter->setOffice2003Compatibility(true);//office2003 と互換性があります
//ドキュメントの基本プロパティを設定します
$objProps = $objExcel->getProperties() //Get PHPExcel_document ドキュメント オブジェクト
$objProps- >setCreator("Zeal Li"); //作成者を設定します
$objProps->setLastModifiedBy("Zeal Li"); //最終更新時刻を設定します
$objProps-> setTitle("Office XLS テスト ドキュメント"); //タイトルを設定
$objProps->setSubject("Office XLS テスト ドキュメント、デモ");//テーマを設定
$objProps->setDescription("テスト ドキュメント、生成PHPExcel.");//説明
$ objProps->setKeywords("office Excel PHPExcel"); //キーワード
$objProps->setCategory("Test"); //Category
$objExcel->setActiveSheetIndex( 0);//ユーザーが Excel を開くように設定します ファイルを開くときに、最初に表示されるシートが設定されていない場合、デフォルトで最後に操作されたシートになります
$objActSheet->setTitle('Test Sheet');// 名前を設定します現在アクティブなワークブックの
//セルに従って、名前によってセルのコンテンツが設定され、PHPExcel は受信したコンテンツに基づいてセルのコンテンツ タイプを自動的に決定します
$objActSheet->setCellValue('A1', 'String content' ); // 文字列の内容
$objActSheet-> setCellValue('A2', 26); // 値
$objActSheet->setCellValue('A3', true); ('A4', '=SUM(A2:A2 )'); // 式
/セルのコンテンツ タイプを文字列型として明示的に指定
$objActSheet->setCellValueExplicit('A5','847475847857487584',PHPExcel_Cell_DataType: :TYPE_STRING);
//セルを結合
$objActSheet->mergeCells('B1:C22');
//列の幅を設定
$objActSheet->getColumnDimension('B')->setAutoSize( true);
$objActSheet->getColumnDimension(' A')->setWidth(30);
//行の高さを設定します
$objPHPExcel->getActiveSheet()->getRowDimension('2') ->setRowHeight(11.5);
//形式: Main フォントの設定、配置の設定、境界線の設定など、セルの操作に使用されます。
$objStyleA5 = $objActSheet->getStyle('A5');//セル A5 のスタイルを取得します
// セルのフォントを設定します
$objFontA5 = $objStyleA5->getFont(); // フォントを取得します
$objFontA5->setName('宋体'); name
$objFontA5->setSize(10); // フォントサイズを設定します
$objFontA5->setBold(true);// フォントを太字に設定します
$objFontA5->getColor()->setARGB ('FF999999');//フォントの色を設定します
//セルの配置を設定します
$objAlignA5 = $objStyleA5->getAlignment();//配置を取得します
$objAlignA5->set水平(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT); //水平右
$objAlignA5->setVertical(PHPExcel_Style_Alignment : :VERTICAL_CENTER);//垂直中央
//セルの境界線を設定
$objBorderA5 = $objStyleA5->getBorders();//境界線を取得
$objBorderA5->getTop()->setBorderStyle(PHPExcel_Style_Border:: BORDER_THIN);//ボーダースタイル
$objBorderA5->getTop()->getColor()->setARGB('FFFF0000');//上の境界線の色
$objBorderA5->getBottom()-> setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objBorderA5->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);//左スタイル
$objBorderA5->getRight()->setBorderStyle(PHPExcel_Style _Border::BORDER_THIN );//右スタイル
//セルの塗りつぶし色を設定します
$objFillA5 = $objStyleA5->getFill();//塗りつぶし
$objFillA5->setFillType(PHPExcel_Style_Fill::FILL_SOLID);//塗りつぶしの種類
$objFillA5->getStartColor()->setARGB('FFEEEEEE');
//セルの値を計算します
$objPHPExcel- >getActiveSheet()->setCellValue('B7', '=SUM(B5: C5)');
$objPHPExcel->getActiveSheet()->getCell('B7')->getTotalValue();
//セルの値を取得したい場合は、まずワークシートの getCell メソッドを使用してセル オブジェクトを取得し、次にセル オブジェクトの getValue メソッドを通じてセルの値を取得する必要があります。セルの値は計算によって取得されるため、getownedValue メソッドを使用してセルの値を取得し、セルの値を設定する必要があるのは、ワークシートの setCellValue メソッドを使用するだけです
//$dateTimeNow=time。 ();
$objPHPExcel->getActiveSheet()->setCellValue('C10', PHPExcel_Shared_Date::PHPToExcel( $dateTimeNow ));//41105.75
$objPHPExcel->getActiveSheet()->getStyle('C10')-> ;getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4);//18:00:54、表示方法を変更するだけで、元の値の型は変わりません
echo gettype($objPHPExcel->getActiveSheet( )->getCell('C10')->getValue());//double
echo $objPHPExcel->getActiveSheet()->getCell('C10')->getValue();//41105.75
//'2010-10-21' は引用符で囲む必要があります。それ以外の場合、表示される値は 1979 テキスト (推奨)
$objPHPExcel->setActiveSheetIndex(0)->setCellValueExplicit("D1", '2010- 10-21', PHPExcel_Cell_DataType::TYPE_STRING); //機能: 文字列型が左側に表示されます
//新しいワークシートを追加します
$objExcel->createSheet();//新しいワークシートを作成します
$ objExcel-> ;getSheet(1)->setTitle('Test 2');//現在のワークシートのタイトルを設定します
//セルを保護します
$objExcel->getSheet(1)->getProtection()- >setSheet (true);
$objExcel->getSheet(1)->protectCells('A1:C22', 'PHPExcel');
//内容を Excel ファイルに出力し、ファイルをサーバーに保存します
$objWriter ->save("test.xls");
//出力コンテンツをブラウザに強制的にダウンロードします
header("Content-Type: application/force-download");
header("Content-Type: application/オクテットストリーム");
header("Content-Type: application/download");
header('Content-Disposition:inline;filename="'.$outputFileName.'"');
header("コンテンツ-転送 -エンコーディング: バイナリ");
header("有効期限: 1997 年 7 月 26 日月曜日 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s ") . " GMT");
header("キャッシュ制御: 必須再検証、事後チェック = 0、事前チェック = 0");
ヘッダー("プラグマ: キャッシュなし");
$objWriter- > save('php://output');//パラメータ - クライアントのダウンロードのためにブラウザへの直接出力を示します
//Excel 読み取りオブジェクト
$PHPReader = new PHPExcel_Reader_Excel5();//Excel ファイル リーダーを作成しますobject
$PHPExcel = $PHPReader->load($filePath);//Excel テーブルを読み取り、Excel ファイルを返します object
$currentSheet = $PHPExcel->getSheet(0);//Excel ファイルを読み取りますworksheet in
$allColumn = $currentSheet->getHighestColumn();//現在のワークシートの最大列番号を取得します。例: E
$allRow = $currentSheet->getHighestRow();//行数を取得現在のワークシートにありますか? // ワークブックのデフォルトのスタイルを設定します。 $objPHPExcel->getDefaultStyle()->getFont()->setName('Arial');
$objPHPExcel->getDefaultStyle() ->getFont()->setSize(8);
//セルを結合
$objPHPExcel->getActiveSheet()->mergeCells('A18:E22');

著作権声明: この記事はブロガーによるオリジナルの記事であり、ブロガーの許可なく複製することはできません。

上記は、Yii2 が PHPExcel を使用して Excel を読み取る方法を、関連する内容も含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。

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