プロジェクトの開発時に、レポート統計を生成する必要があることは珍しくありません。 プロジェクトがDelphi 、 C#または、たとえばC ++およびWindowsで開発されている場合、問題はありません。 COMオブジェクトを使用するだけです。 ただし、 PHPでExcel形式のレポートを生成する必要がある場合、状況は異なります。 そして、この作成がUNIXライクなシステムで機能するようにします。 しかし、幸いなことに、それほど悪くはありません。 そして、これには十分なライブラリがあります。 PHPExcelを選択しました 。 私はこのライブラリで数年働いており、満足しています。 クロスプラットフォームなので、移植性に問題はありません。
PHPExcelを使用すると、Excelにデータをインポートおよびエクスポートできます。 さまざまなデザインスタイルをレポートに適用します。 一般的に、すべてが上にあります。 数式を使用することもできます。 すべての作業(読み取りおよび書き込み)がutf-8エンコードである必要があることを考慮する必要があるだけです。
ライブラリのインストール
動作するには、PHPバージョン5.2.0以降が必要です。 次の拡張機能も必要です:php_zip、php_xml、php_gd2。 ここからライブラリをダウンロードできます。
PHPExcelライブラリを使用すると、次の形式でデータを書き込むことができます。
- Excel 2007
- Excel 97以降。
- PHPExcel Serialized Spreadshet;
- HTML
- PDF
- CSV
PHPからExcelにデータをインポートする
九九を形成する例を考えてみましょう。
次に、* .xlsファイルを取得する必要があります。 ここでは、2つの方法で移動できます。 あなたがオンラインストアを持っていると仮定し、クライアントが価格表をダウンロードしたい場合、この結論に頼る方が良いでしょう:
ここで、生成されたデータはすぐにブラウザに「吐き出され」ます。 ただし、すぐに「捨てる」のではなくファイルを保存する必要がある場合は、 HTTPヘッダーを表示する必要はなく、「php://出力」の代わりにファイルのパスを指定する必要があります。 ファイルを作成するディレクトリには書き込み権限が必要であることを忘れないでください。 これはUNIXライクシステムに適用されます。
3つの便利な指示の例を見てみましょう。
- $ sheet-> getColumnDimension( 'A')-> setWidth(40) -列「A」を幅40単位に設定します。
- $ sheet-> getColumnDimension( 'B')-> setAutoSize(true) -ここで、列「B」には自動幅が設定されます。
- $ sheet-> getRowDimension(4)-> setRowHeight(20)-4番目の行の高さを20ユニットに設定します。
また、レポートの操作に必要な次の方法にも注意してください。
- セルにデータを挿入する方法:
- setCellValue ([$ pCoordinate = 'A1' [、$ pValue = null [、$ returnCell = false]]])-3つのパラメーターを取ります:セルの座標、セルに出力されるデータ、3番目のパラメーターはブール型の定数のいずれか: trueまたはfalse ( trueが渡された場合 、メソッドはセルオブジェクトを返し、そうでない場合はワークシートオブジェクトを返します);
- setCellValueByColumnAndRow ([$ pColumn = 0 [、$ pRow = 1 [、$ pValue = null [、$ returnCell = false]]]])-4つのパラメーターを受け取ります:セル列番号、セル行番号、セルに出力するデータ、4番目このパラメーターは、 setCellValue ()メソッドの3番目のパラメーターと同様に機能します。
- セルを取得する方法:
- getCell ([$ pCoordinate = 'A1'])-セルの座標をパラメーターとして受け取ります。
- getCellByColumnAndRow ([$ pColumn = 0 [、$ pRow = 1]])-列番号とセル行の形式で2つのパラメーターを取ります。
ご覧のとおり、上記のメソッドはペアになっています。 したがって、座標の文字列または数値表現を使用してセルを操作できます。 もちろん、これは作業の追加の利点です。
ExcelでPHPを使用したレポート作成
非常に多くの場合、レポートの一部のデータを強調表示する必要があります。 フォントを選択するか、一部のセルなどに背景を塗りつぶした境界線を適用します これにより、最も重要な情報に集中することができます(真実は気を散らす可能性があります)。 これらの目的のために、PHPExcelライブラリには、Excelのセルに適用できる一連のスタイルがあります。 もちろん、このライブラリにはわずかな「マイナス」があります。スタイルを複数のセルに同時に適用することはできませんが、個々のセルにのみ適用できます。 しかし、これはWebアプリケーションの開発時に不快感を引き起こすことはありません。
セルのスタイルを設定するには、次の3つの方法があります。
- PHPExcel_StyleクラスのapplyFromArrayメソッドを使用します。 次のパラメーターを持つ配列がapplyFromArrayメソッドに渡されます。
- fill-充填パラメータを持つ配列。
- font-フォントパラメータを持つ配列。
- borders-フレームパラメータを持つ配列。
- alignment-位置合わせパラメーターを持つ配列。
- numberformat-セルデータ表示のフォーマットパラメータを含む配列
- 保護 -セル保護パラメーターを持つ配列。
- PHPExcel_StyleクラスのduplicateStyleメソッドを適用します。 このメソッドは、事前にロードされたファイル(テンプレート)を使用する必要がある場合に非常に役立ちます。この場合、特定のセルのスタイルを自分で定義するよりも複製する方が便利です。 このメソッドは2つのパラメーターを取ります。
- pCellStyle-このパラメーターは、PHPExcel_Styleクラスのインスタンスです。
- pRange-セルの範囲。
- スタイルごとにPHPExcel_Styleクラスのメソッドを個別に使用します。 たとえば、次のようにセルにフォントを割り当てることができます:$ sheet-> getStyle( 'A1')-> getFont()-> setName( 'Arial')。
注ぐ
fillパラメーターの値は、次のオプションパラメーターを持つ配列です。
- type-塗りつぶしタイプ。
- 回転 -勾配角度。
- startcolor -RGB形式の初期カラーパラメータを持つ配列形式の値。
- endcolor -ARGB形式の最終的な色パラメーターを持つ配列形式の値。
- color -RGB形式の初期カラーパラメータを持つ配列形式の値。
塗りつぶしスタイルFILL_NONE | なし |
FILL_SOLID | 固い |
FILL_GRADIENT_LINEAR | 線形 |
FILL_GRADIENT_PATH | 道 |
FILL_PATTERN_DARKDOWN | 暗闇 |
FILL_PATTERN_DARKGRAY | ダークグレー |
FILL_PATTERN_DARKGRID | ダークグリッド |
FILL_PATTERN_DARKHORIZONTAL | 暗い水平 |
FILL_PATTERN_DARKTRELLIS | darkTrellis |
FILL_PATTERN_DARKUP | 暗黒 |
FILL_PATTERN_DARKVERTICAL | 暗い垂直 |
FILL_PATTERN_GRAY0625 | gray0625 |
FILL_PATTERN_GRAY125 | グレー125 |
FILL_PATTERN_LIGHTDOWN | ライトダウン |
FILL_PATTERN_LIGHTGRAY | lightGray |
FILL_PATTERN_LIGHTGRID | lightGrid |
FILL_PATTERN_LIGHTHORIZONTAL | 光の水平 |
FILL_PATTERN_LIGHTTRELLIS | lightTrellis |
FILL_PATTERN_LIGHTUP | ライトアップ |
FILL_PATTERN_LIGHTVERTICAL | lightVertical |
FILL_PATTERN_MEDIUMGRAY | mediumGray |
塗りつぶしの設定を指定する例: array( 'type' => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR, 'rotation' => 0, 'startcolor' => array( 'rgb' => '000000' ), 'endcolor' => array( 'argb' => 'FFFFFFFF' ), 'color' => array( 'rgb' => '000000' ) );
または、次の方法を使用できます。
$ PHPExcel_Style-> getFill()-> setFillType(PHPExcel_Style_Fill :: FILL_GRADIENT_LINEAR);
$ PHPExcel_Style-> getFill()-> setRotation(0);
$ PHPExcel_Style-> getFill()-> getStartColor()-> applyFromArray(array( 'rgb' => 'C2FABD'));
$ PHPExcel_Style-> getFill()-> getEndColor()-> applyFromArray(array( 'argb' => 'FFFFFFFF'))。
画像挿入
めったにありませんが、レポートに画像を挿入すると便利です。 ロゴ、図などを使用できます。 動作するには、次のメソッドが必要です。
- setPath ([$ pValue = ''、[$ pVerifyFile = true ]])-このメソッドは2つのパラメーターを取ります。 最初のパラメーターは、画像ファイルへのパスです。 また、2番目のパラメーターは、ファイルの存在を確認する必要があるかどうかを示す意味があります(値trueまたはfalseのいずれかを取ることができます )。
- setCoordinates ([$ pValue = 'A1']))-セル座標を持つ文字列の形式の入力として1つのパラメーターを取ります。
- setOffsetX ([$ pValue = 0])-セルの左端からXのオフセット値を持つパラメーターを1つ受け取ります。
- setOffsetY ([$ pValue = 0])-セルの上端からYのオフセット値を持つ1つのパラメーターを取ります。
- setWorksheet ([$ pValue = null 、[$ pOverrideOld = false ]])-このメソッドは入力として2つのパラメーターを取ります。 最初は必須ですが、2番目は必須ではありません。 最初のパラメーターは、 PHPExcel_Worksheetクラスのインスタンス(現在のアクティブシート)です。 2番目のパラメーターの値としてtrueを渡すと、シートが既により早く割り当てられている場合、それは上書きされ、イメージはそれに応じて削除されます。
画像挿入アルゴリズムを示すコードを以下に示します:
... $sheet->getColumnDimension('B')->setWidth(40); $imagePath = dirname ( __FILE__ ) . '/excel.png'; if (file_exists($imagePath)) { $logo = new PHPExcel_Worksheet_Drawing(); $logo->setPath($imagePath); $logo->setCoordinates("B2"); $logo->setOffsetX(0); $logo->setOffsetY(0); $sheet->getRowDimension(2)->setRowHeight(190); $logo->setWorksheet($sheet); } ...
以下は、画像が挿入されたレポートです。
フォント
次のオプションパラメータを含む配列は、 fontパラメータの値として指定されます。
- name-フォント名;
- サイズ -フォントサイズ。
- 太字 - 太字で強調表示。
- 斜体 -斜体;
- 下線 - 下線スタイル。
- ストライク -取り消し線。
- superScript-上付き文字
- subScript-下付き文字;
- color -RGB形式の色パラメーターを持つ配列値。
下線スタイルUNDERLINE_NONE | いや |
UNDERLINE_DOUBLE | 二重下線 |
UNDERLINE_SINGLE | 一重下線 |
フォントの設定を指定する例: array( 'name' => 'Arial', 'size' => 12, 'bold' => true, 'italic' => false, 'underline' => PHPExcel_Style_Font::UNDERLINE_DOUBLE, 'strike' => false, 'superScript' => false, 'subScript' => false, 'color' => array( 'rgb' => '808080' ) );
または、次の方法を使用します。
$ PHPExcel_Style-> getFont()-> setName( 'Arial');
$ PHPExcel_Style-> getFont()-> setBold(true);
$ PHPExcel_Style-> getFont()-> setItalic(false);
$ PHPExcel_Style-> getFont()-> setSuperScript(false);
$ PHPExcel_Style-> getFont()-> setSubScript(false);
$ PHPExcel_Style-> getFont()-> setUnderline(PHPExcel_Style_Font :: UNDERLINE_DOUBLE);
$ PHPExcel_Style-> getFont()-> setStrikethrough(false);
$ PHPExcel_Style-> getFont()-> getColor()-> applyFromArray(array( 'rgb' => '808080'));
$ PHPExcel_Style-> getFont()-> setSize(12)。
フレーム
配列は、次のオプションパラメータを含むbordersパラメータの値として指定されます。
- フレームタイプ -(上|ブース|左|右|対角線|対角線方向);
- スタイル -フレームスタイル。
- color -RGB形式の色パラメーターを持つ配列値。
線のスタイルBORDER_NONE | いや |
BORDER_DASHDOT | ドットが点在 |
BORDER_DASHDOTDOT | 2つのドットが点在 |
BORDER_DASHED | 点線 |
BORDER_DOTTED | ポイント |
BORDER_DOUBLE | ダブル |
BORDER_HAIR | ヘアライン |
BORDER_MEDIUM | 平均的 |
BORDER_MEDIUMDASHDOT | ドットが点在 |
BORDER_MEDIUMDASHDOTDOT | 2つの点を持つ太い点線 |
BORDER_MEDIUMDASHED | 太い点線 |
BORDER_SLANTDASHDOT | 点線点線 |
BORDER_THICK | 厚くなった |
BORDER_THIN | 薄い |
フレームの設定を指定する例: array( 'bottom' => array( 'style' => PHPExcel_Style_Border::BORDER_DASHDOT, 'color' => array( ' rgb' => '808080' ) ), 'top' => array( 'style' => PHPExcel_Style_Border::BORDER_DASHDOT, 'color' => array( 'rgb' => '808080' ) ) );
次の方法を使用することもできます。
$ PHPExcel_Style-> getBorders()-> getLeft()-> applyFromArray(array( 'style' => PHPExcel_Style_Border :: BORDER_DASHDOT、 'color' => array( 'rgb' => '808080')));
$ PHPExcel_Style-> getBorders()-> getRight()-> applyFromArray(array( 'style' => PHPExcel_Style_Border :: BORDER_DASHDOT、 'color' => array( 'rgb' => '808080')));
$ PHPExcel_Style-> getBorders()-> getTop()-> applyFromArray(array( 'style' => PHPExcel_Style_Border :: BORDER_DASHDOT、 'color' => array( 'rgb' => '808080')));
$ PHPExcel_Style-> getBorders()-> getBottom()-> applyFromArray(array( 'style' => PHPExcel_Style_Border :: BORDER_DASHDOT、 'color' => array( 'rgb' => '808080')));
$ PHPExcel_Style-> getBorders()-> getDiagonal()-> applyFromArray(array( 'style' => PHPExcel_Style_Border :: BORDER_DASHDOT、 'color' => array( 'rgb' => '808080')));
$ PHPExcel_Style-> getBorders()-> setDiagonalDirection(array( 'style' => PHPExcel_Style_Border :: BORDER_DASHDOT、 'color' => array( 'rgb' => '808080')))
アライメント
アラインメントパラメータ値は、4つのオプションパラメータを入力として受け入れる配列です。
- horizontal-水平配置の定数。
- vertical-垂直方向の配置の定数。
- rotation-テキストの回転角度。
- wrap-テキストの折り返しを有効にします。
- shrinkToFit-テキストがセル領域から出たときにフォントサイズを変更するかどうか。
- インデント -左端からインデントします。
水平方向の配置HORIZONTAL_GENERAL | メイン |
HORIZONTAL_LEFT | 左 |
HORIZONTAL_RIGHT | 右へ |
HORIZONTAL_CENTER | 中央に |
HORIZONTAL_CENTER_CONTINUOUS | 選択中心 |
HORIZONTAL_JUSTIFY | 幅で |
垂直方向の配置VERTICAL_BOTTOM | 下端に沿って |
VERTICAL_TOP | 上端 |
VERTICAL_CENTER | 中央に |
VERTICAL_JUSTIFY | 高さで |
整列スタイル設定の例: array( 'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER, 'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER, 'rotation' => 0, 'wrap' => true, 'shrinkToFit' => false, 'indent' => 5 )
または、次の方法を使用します。
$ PHPExcel_Style-> getAlignment()-> setHorizontal(PHPExcel_Style_Alignment :: HORIZONTAL_CENTER);
$ PHPExcel_Style-> getAlignment()-> setVertical(PHPExcel_Style_Alignment :: VERTICAL_JUSTIFY);
$ PHPExcel_Style-> getAlignment()-> setTextRotation(10);
$ PHPExcel_Style-> getAlignment()-> setWrapText(true);
$ PHPExcel_Style-> getAlignment()-> setShrinkToFit(false);
$ PHPExcel_Style-> getAlignment()-> setIndent(5)。
データ表示形式
numberformatパラメーターは、1つのパラメーター( code-セルデータ形式)のみを含む配列です。
可能な形式のリストFORMAT_GENERAL | 全般 |
FORMAT_TEXT | @ |
FORMAT_NUMBER | 0 |
FORMAT_NUMBER_00 | 0.00 |
FORMAT_NUMBER_COMMA_SEPARATED1 | #、## 0.00 |
FORMAT_NUMBER_COMMA_SEPARATED2 | #、## 0.00_- |
FORMAT_PERCENTAGE | 0% |
FORMAT_PERCENTAGE_00 | 0.00% |
FORMAT_DATE_YYYYMMDD2 | yyyy-mm-dd |
FORMAT_DATE_YYYYMMDD | yy-mm-dd |
FORMAT_DATE_DDMMYYYY | dd / mm / yy |
FORMAT_DATE_DMYSLASH | d / m / y |
FORMAT_DATE_DMYMINUS | dmy |
FORMAT_DATE_DMMINUS | dm |
FORMAT_DATE_MYMINUS | 私の |
FORMAT_DATE_XLSX14 | mm-dd-yy |
FORMAT_DATE_XLSX15 | d-mmm-yy |
FORMAT_DATE_XLSX16 | d-mmm |
FORMAT_DATE_XLSX17 | mmm-yy |
FORMAT_DATE_XLSX22 | m / d / yy h:mm |
FORMAT_DATE_DATETIME | d / m / yh:mm |
FORMAT_DATE_TIME1 | h:mm AM / PM |
FORMAT_DATE_TIME2 | h:mm:ss AM / PM |
FORMAT_DATE_TIME3 | h:mm |
FORMAT_DATE_TIME4 | h:mm:ss |
FORMAT_DATE_TIME5 | mm:ss |
FORMAT_DATE_TIME6 | h:mm:ss |
FORMAT_DATE_TIME7 | i:sS |
FORMAT_DATE_TIME8 | h:mm:ss |
FORMAT_DATE_YYYYMMDDSLASH | yy / mm / dd; @ |
FORMAT_CURRENCY_USD_SIMPLE | "$"#、## 0.00 _-; @ |
FORMAT_CURRENCY_USD | $#、## 0_- |
FORMAT_CURRENCY_EUR_SIMPLE | [$ EUR]#、## 0.00_- |
セルデータ形式の設定例: array( 'code' => PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE );
または、次の方法を使用できます。
$ PHPExcel_Style-> getNumberFormat()-> setFormatCode(PHPExcel_Style_NumberFormat :: FORMAT_CURRENCY_EUR_SIMPLE);
セル保護
保護パラメーターの値は、2つのオプションパラメーターを含む配列です。
- ロック -セルを保護します。
- hidden-数式を非表示にします。
セル保護のパラメーターの設定例: array( 'locked' => true, 'hidden' => false );
または、次の方法を使用します。
$ PHPExcel_Style-> getProtection()-> setLocked(true);
$ PHPExcel_Style-> getProtection()-> setHidden(false);
これで、スタイル設定と各スタイルに存在するパラメーターがわかりました。 ここで、表のセルにスタイルを適用しますが、これは3つの方法で行います。 最初の方法は、設定の配列を作成することです。設定の配列は、 PHPExcel_StyleクラスのapplyFromArrayメソッドにパラメーターとして渡します。
$style = array( 'font' => array( 'name' => 'Arial', ), 'fill' => array( 'type' => PHPExcel_Style_Fill::FILL_SOLID, 'color' => array ( 'rgb' => 'C2FABD' ) ), 'alignment' => array ( 'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER ) );
次に、作成したスタイルをExcelセルに適用します。
$sheet->getStyleByColumnAndRow($i - 2, $j)->applyFromArray($style);
ここで、同じスタイルを適用しますが、異なる手法を使用します。
取得したものは次のとおりです。
特定のセルのスタイルデータを取得するには、PHPExcel_Styleクラスのインスタンスを返す次のメソッドのいずれかを使用する必要があります。
- getStyleByColumnAndRow ([$ pColumn = 0 [、$ pRow = 1]])-数値座標でセルにアクセスする場合に使用されます。 このメソッドは、列番号とセル行の形式で2つのパラメーターを渡す必要があります。
- getStyle ([pCellCoordinate = 'A1'])-セルの文字列座標にアクセスするために使用されます。 メソッドは1つのパラメーターを渡す必要があります。これは座標の文字列表現です。
次に、スタイルを複製してセルをスタイル設定する3番目の方法を検討します。 使用例を以下に示します(特定のスタイルがセル「B2」に適用され、セル「F2:F10」の範囲に対してそれを複製することを想定しています):
$sheet->duplicateStyle($sheet->getStyle('B2'), 'F2:F10');
コメントを追加
セルにコメントを追加する機会を誰かが取る機会は少ないと思いますが、これは純粋に私の個人的な意見ですが、そのような機会があります。 以下の例からわかるように、セルへのコメントの追加は非常に簡単です。
...
createTextRun()メソッドを再度呼び出すと、新しいコメントが既存のコメントに追加されますが、置き換えられないことに注意してください。 このメソッドは、 PHPExcel_RichText_Runクラスのオブジェクトを返すことに注意してください。このクラスには、フォントパラメータを設定および受信するメソッドがあります。
- getFont ()- PHPExcel_Style_Fontフォントを操作するためのクラスオブジェクトを返します。
- setFont ([$ pFont = null ]))))-このメソッドは、クラスPHPExcel_Style_Fontのオブジェクトをパラメーターとして渡す必要があります。
以下にコメントを示します。
リンク挿入
以下の例からわかるように、セルにリンクを挿入しても問題は発生しません。
...
リンクの形式でも使用できます。たとえば、メールアドレス:mailto:example@mail.com。
Excelからのデータの読み取り
レポートを生成し、それらにスタイルを適用することは確かに素晴らしいです。 しかし、PHPExcelライブラリの可能性はこれで終わりではありません。 さて、彼女が他に何ができるか見てみましょう。 また、* .xls / * .xlsxファイルからデータを読み取ることもできます。
PHPExcelライブラリを使用すると、次の形式を読み取ることができます。
- Excel 2007
- Excel 5.0 / Excel 95;
- Excel 97以降。
- PHPExcel Serialized Spreadshet;
- シンボリックリンク。
- CSV
作業には、2つのクラスのオブジェクトが必要です。
- PHPExcel_Worksheet_RowIterator-行の繰り返しに使用されます。
- PHPExcel_Worksheet_CellIterator-セルの繰り返しに使用されます。
デモンストレーションのために、車に関する情報を含むテーブルからデータを出力します。
ファイルの読み取りの例を以下に示します。
require_once ('PHPExcel/IOFactory.php');
最初のオプション
... echo "<table>";
2番目のオプション
... echo "<table>"; for ($i = 1; $i <= $sheet->getHighestRow(); $i++) { echo "<tr>"; $nColumn = PHPExcel_Cell::columnIndexFromString( $sheet->getHighestColumn()); for ($j = 0; $j < $nColumn; $j++) { $value = $sheet->getCellByColumnAndRow($j, $i)->getValue(); echo "<td>$value</td>"; } echo "</tr>"; } echo "</table>";
最初のオプションでは、反復子を使用してセルからデータを読み取ります。 2番目の方法では、インデックスのアドレス指定を使用して、シートのセルにアクセスしてデータを取得します。 行と列の数に関するデータを取得するには、 PHPExcel_Worksheetクラスの次のメソッドを使用します。
- getHighestColumn() -アクティブなシートで最後に占有された列の記号表現を返します。 注意:列インデックスではなく、そのシンボリック表現(A、Fなど)。
- getHighestRow() -アクティブなシートで占有されている行の数を返します。
また、 PHPExcel_Cellクラスの一部であるcolumnIndexFromStringメソッドの助けがなければ実行できません。 このメソッドを使用すると、シンボル表現によって列のインデックスを決定できます。
デモ機能を使用して、Excel形式のファイル形式でレポートを生成および読み取ることができます。 また、スタイルを操作するためのほぼすべての可能な方法が示されました。