symfonyでExcelファイルを作成するプラグイン
みなさん、こんにちは。
毎年ちょっと遅めの夏休み時期に入ろうとしている、笹亀です。
前回のブログと同様でsymfonyのプラグインのご紹介です。
今回は、symfonyでExcelを出力するプラグインのsfPhpExcelPluginを使ってみました。
sfPhpExcelPluginは、PHPでExcel出力するライブラリの一つであるPHPExcelをsymfony用にプラグイン化したものです。
実際のインストールから基本的なExcelファイルを出力する方法についてご紹介したいと思います。
まずは、プラグインのインストール方法です。
前回と同様ですが、1行で簡単にインストールできますねw
※私の実行環境は、symfonyの1.0ですが、1.1や1.2などをご使用している場合は、インストール方法が若干違うのでご注意ください。
(HomeのInstallationタブを参照)
インストールした後は実装なのですが、私自身がPHPExcelを使ったこともなかったため、実際にどのような使用すればよいか調べながら使いました。
参考にした箇所をメモで残しておきます。参考になればと思います。
・PHPExcelのドキュメントを参照する
・「plugins/sfPhpExcelPlugin/examples/」内に格納されているサンプルファイルをチェックする
・細かいメソッドや設定については、PHPExcelのソースを見る
英語が苦手なもので、ドキュメントを読むのには少々苦労しました^^;
次に、実際にsymfonyのアクションでの使用例を記述します。
下記は、Excelファイルを生成してダウンロードさせるアクションです。
※スクリプトが見えにくい状態になっておりますので、ご注意ください。
実行すると、ダウンロード画面が表示されます。
ダウンロードしたファイルをExcelで開いて内容を確認します。
このように、symfonyでも簡単にExcelを作成することができます。
上記のようにExcelを簡単に作成できるのはとてもいいのですが、簡単なExcelでもスタイルや画像の張り込みなどを行うとスクリプトが長文になってしまい、スクリプトが汚くなってしまうことです。
privateメソッドなどを有効に活用してスタイルを別に定義しておくなど、工夫すると若干見やすくなります。
個人的にいただけないのが、一度ファイルに出力してからそのファイルを読み込むという二度手間みたいな処理をしないといけないのが気持ちが悪いです。
いいライブラリな分、不便な点も目立ちますね^^;
便利な所と不便な所を理解して、上手に活用していきたいものです。
このブログは、下記のサイトを参考にさせていただきました。
PHPExcel
http://www.codeplex.com/PHPExcel
sfPhpExcelPlugin
http://www.symfony-project.org/plugins/sfPhpExcelPlugin
symfony usersページ
http://groups.google.com/group/symfony-users/browse_thread/thread/c7f28113284a491a
毎年ちょっと遅めの夏休み時期に入ろうとしている、笹亀です。
前回のブログと同様でsymfonyのプラグインのご紹介です。
今回は、symfonyでExcelを出力するプラグインのsfPhpExcelPluginを使ってみました。
sfPhpExcelPluginは、PHPでExcel出力するライブラリの一つであるPHPExcelをsymfony用にプラグイン化したものです。
実際のインストールから基本的なExcelファイルを出力する方法についてご紹介したいと思います。
まずは、プラグインのインストール方法です。
前回と同様ですが、1行で簡単にインストールできますねw
- php
symfony plugin-install http://plugins.symfony-project.org/sfPhpExcelPlugin
※私の実行環境は、symfonyの1.0ですが、1.1や1.2などをご使用している場合は、インストール方法が若干違うのでご注意ください。
(HomeのInstallationタブを参照)
インストールした後は実装なのですが、私自身がPHPExcelを使ったこともなかったため、実際にどのような使用すればよいか調べながら使いました。
参考にした箇所をメモで残しておきます。参考になればと思います。
・PHPExcelのドキュメントを参照する
・「plugins/sfPhpExcelPlugin/examples/」内に格納されているサンプルファイルをチェックする
・細かいメソッドや設定については、PHPExcelのソースを見る
英語が苦手なもので、ドキュメントを読むのには少々苦労しました^^;
次に、実際にsymfonyのアクションでの使用例を記述します。
下記は、Excelファイルを生成してダウンロードさせるアクションです。
※スクリプトが見えにくい状態になっておりますので、ご注意ください。
- public
function executeTestExecelOutput() - {
//このプラグインでは「Strict Standards」のエラーが出るためエラーレベルを調整する error_reporting(E_ALL); //オブジェクト生成 $objPHPExcel = new sfPhpExcel(); //Excelファイルのファイル情報をセット(MacのExcelでは確認できませんでした $objPHPExcel->getProperties()->setCreator("笹亀弘"); $objPHPExcel->getProperties()->setLastModifiedBy("笹亀弘"); $objPHPExcel->getProperties()->setTitle("Excel"); $objPHPExcel->getProperties()->setSubject("テストExcel"); $objPHPExcel->getProperties()->setDescription("ExcelファイルをPHPで出力するテストです"); $objPHPExcel->getProperties()->setKeywords("office Execel php"); $objPHPExcel->getProperties()->setCategory("カテゴリをセット"); //使用するシートを指定し、シートタイトルをセットする $objPHPExcel->getActiveSheet()->setTitle('Simple'); $objPHPExcel->setActiveSheetIndex(0); //デフォルトのスタイルにフォントとフォントサイズを設定(ここでは「MSゴシック」を指定) $objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setName('MS Gothic'); $objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setSize(8); //ページの種類とページサイズと印刷エリアの指定(うまく動いているか微妙でした $objPHPExcel->getActiveSheet()->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_DEFAULT); $objPHPExcel->getActiveSheet()->getPageSetup()->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4); $objPHPExcel->getActiveSheet()->getPageSetup()->setPrintArea('A1:T58'); //Cellに値をセット(エクセルの関数も使用できます $objPHPExcel->getActiveSheet()->setCellValue('A1', '15'); $objPHPExcel->getActiveSheet()->setCellValue('A2', '58'); $objPHPExcel->getActiveSheet()->setCellValue('A3', '=SUM(A1:A2)'); $objPHPExcel->getActiveSheet()->setCellValue('B1', '日本語日本語日本語日本語日本語日本語日本語日本語日本語日本語日本語日本語日本語'); //Cellの行サイズをセット $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(40); $objPHPExcel->getActiveSheet()->getRowDimension('2')->setRowHeight(100); //Cellの列サイズをセット(列サイズの数値と同じ数値をセットしてもサイズが違うみたいです $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(16); $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(16); //B1のCellのスタイルをセットする // ・文字をセンタリングしてセル内で折り返す // ・セル内を塗りつぶす // ・上下左右を枠線で囲む $objPHPExcel->getActiveSheet()->getStyle('B1')->applyFromArray( array( 'alignment' => array( 'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER, 'vertical' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER, 'wrap' => true, ), 'borders' => array( 'top' => array('style' => PHPExcel_Style_Border::BORDER_THIN), 'bottom' => array('style' => PHPExcel_Style_Border::BORDER_THIN), 'left' => array('style' => PHPExcel_Style_Border::BORDER_THIN), 'right' => array('style' => PHPExcel_Style_Border::BORDER_THIN) ), 'fill' => array( 'type' => PHPExcel_Style_Fill::FILL_SOLID, 'rotation' => 90, 'startcolor' => array('argb' => 'CACC33FF'), 'endcolor' => array('argb' => 'FFFFFFFF') ) ) ); //B1セルのスタイルをコピーしてB2〜B4まで適応させる $objPHPExcel->getActiveSheet()->duplicateStyle($objPHPExcel->getActiveSheet()->getStyle('B1'), 'B2:B4'); //B2〜B4までをセルを結合する $objPHPExcel->getActiveSheet()->mergeCells('B2:B4'); //シート内に画像を貼ることもできます(C2セルの位置から画像を貼る場合 $objDrawing = new PHPExcel_Worksheet_Drawing(); $objDrawing->setWorksheet($objPHPExcel->getActiveSheet()); $objDrawing->setName('Paid'); $objDrawing->setDescription('Paid'); $objDrawing->setPath('/tmp/macos.gif'); $objDrawing->setCoordinates('C2'); $objDrawing->setOffsetX(20); $objDrawing->setOffsetY(10); $objDrawing->setRotation(25); //Office 2007またはExcel5形式で出力(CSVやHTMLやPDFなどでも出力可能 //$output = new PHPExcel_Writer_Excel2007($objPHPExcel); $output = new PHPExcel_Writer_Excel5($objPHPExcel); $output->save('/tmp/test.xls'); //保存したファイルを読み込みダウンロードさせるヘッダー情報を出力 $data = fread(fopen('/tmp/test.xls', "r"), filesize('/tmp/test.xls')); $response = $this->getContext()->getResponse(); $response->setHttpHeader('Pragma', ''); $response->setHttpHeader('Cache-Control', ''); $response->setHttpHeader('Content-Type', 'application/vnd.ms-excel'); $response->setHttpHeader('Content-Disposition', 'attachment; filename="test.xls"'); $response->setContent($data); //テンプレートを表示しないようにする return sfView::NONE; - }
実行すると、ダウンロード画面が表示されます。
ダウンロードしたファイルをExcelで開いて内容を確認します。
このように、symfonyでも簡単にExcelを作成することができます。
上記のようにExcelを簡単に作成できるのはとてもいいのですが、簡単なExcelでもスタイルや画像の張り込みなどを行うとスクリプトが長文になってしまい、スクリプトが汚くなってしまうことです。
privateメソッドなどを有効に活用してスタイルを別に定義しておくなど、工夫すると若干見やすくなります。
個人的にいただけないのが、一度ファイルに出力してからそのファイルを読み込むという二度手間みたいな処理をしないといけないのが気持ちが悪いです。
いいライブラリな分、不便な点も目立ちますね^^;
便利な所と不便な所を理解して、上手に活用していきたいものです。
このブログは、下記のサイトを参考にさせていただきました。
PHPExcel
http://www.codeplex.com/PHPExcel
sfPhpExcelPlugin
http://www.symfony-project.org/plugins/sfPhpExcelPlugin
symfony usersページ
http://groups.google.com/group/symfony-users/browse_thread/thread/c7f28113284a491a
コメント
-
- Jorge
- 2010年01月05日 14:42
- 素晴らしいチュートリアル!私のダウンロードはsymfonyにファイルをxlsファイルを生成するに悩まされている。あなたの例のためにも、 Googleの翻訳をいただきありがとうございます。どちらも英語も私のためのガイドなどがスペイン語で、彼とは非常に私のような初心者には難しいものでした:)
コメントフォーム
トラックバックURI
最近の記事
JavaScriptのクロスドメイン問題対応方法 [2012年05月17日 : 笹亀弘]
JavaScriptのコーディング規約を気軽にチェック [2012年05月14日 : 中川善樹]
誕生日プレゼント [2012年05月10日 : 阿部恵]
イラストでわかる!git入門の入門 [2012年05月09日 : 志田仁美]
【CSS3】HSL色空間による色指定のすゝめ [2012年05月09日 : 橋本章史]
インスピレーションをかきたてるポスターデザインのまとめ記事のまとめ [2012年04月25日 : 鴨田健次]
エンジニアの英会話 〜とっさの一言〜 [2012年04月19日 : 斉藤勝也]
イコライザーをFireworksで描いてみました [2012年04月16日 : 和田記光]
SFNewTech Japan Night のファイナリストに選出されました!(他、もろもろの出展の御案内) [2012年04月06日 : 小林有佳]
使えるとちょっと便利なSSHのTIPS [2012年04月04日 : 牧野克俊]












