So-net無料ブログ作成
Lancers.jp

CakePHPでエクセルファイルの出力 [CakePHP]

超久しぶりにCakeの小ネタ。

DBのデータをCSVで出力することは多いと思うけど、どうせ社内で使うならエクセル形式の方が良いので.xlsで出力する。

つっても、中身は XMLスプレッドシート(2004)形式。
だから本当は拡張子は .xml なのだけど、それだとATOMや普通のXMLとごっちゃになるので、.xlsで書き出す。

メリットは、
・罫線とか最初から設定してあると嬉しい。
・utf-8で書き出せるから、文字コードのコンバートが要らない。
・1ファイルでもワークシートごとに書き出せる。
・.xls だとエクセルと紐づいてるので、素人にも説明が楽。

デメリットは、
・OOoは拡張子と実際のファイル形式が違うとダメなので、OOoのときは .xml にしないとだめ。

まずは、ルータに下記を追加
/app/config/routes.php
Router::parseExtensions('csv','xml','xls');

テンプレートは、例えばこんな感じ
/app/views/layouts/xls/default.ctp
<?='<?xml version="1.0"?>'?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:html="http://www.w3.org/TR/REC-html40"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
 <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
  <Author>Sandman</Author>
  <LastAuthor>Sandman</LastAuthor>
  <Created><?=(date('Y-m-d').'T'.date('H:i:s'))?></Created>
 </DocumentProperties>
 <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
  <AllowPNG/>
 </OfficeDocumentSettings>
 <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
  <WindowHeight>21660</WindowHeight>
  <WindowWidth>22580</WindowWidth>
  <WindowTopX>6680</WindowTopX>
  <WindowTopY>-520</WindowTopY>
  <Date1904/>
  <AcceptLabelsInFormulas/>
  <ProtectStructure>False</ProtectStructure>
  <ProtectWindows>False</ProtectWindows>
 </ExcelWorkbook>
 <Styles>
  <Style ss:ID="Default" ss:Name="Normal">
   <Alignment ss:Vertical="Bottom"/>
   <Borders/>
   <Font ss:FontName="MS Pゴシック" x:CharSet="128" ss:Size="11.0"/>
   <Interior/>
   <NumberFormat/>
   <Protection/>
  </Style>
 </Styles>
<?php
        
echo $content_for_layout;
?>
</Workbook>



/app/views/users/xls/admin_index.ctp
 <Worksheet ss:Name="ユーザ一覧">
  <Table ss:DefaultColumnWidth="77.0" ss:DefaultRowHeight="17.0">
<?php
foreach ($users as $u){
    
$id $u['User']['id'];
    
$name $u['User']['name_0']." ".$u['Users']['name_1'];
    
$mail $u['User']['email'];
    
$created $u['User']['created'];
    
$city $cities[$u['User']['city']];
?>
   <Row>
    <Cell><Data ss:Type="String"><?=$id?></Data></Cell>
    <Cell><Data ss:Type="String"><?=$name?></Data></Cell>
    <Cell><Data ss:Type="String"><?=$mail?></Data></Cell>
    <Cell><Data ss:Type="String"><?=$city?></Data></Cell>
    <Cell><Data ss:Type="String"><?=$created?></Data></Cell>
   </Row>
<?php
};//foreach ($Users as $u)
?>
  </Table>
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <PageSetup/>
   <Print>
    <ValidPrinterInfo/>
    <PaperSizeIndex>0</PaperSizeIndex>
    <HorizontalResolution>-4</HorizontalResolution>
    <VerticalResolution>-4</VerticalResolution>
   </Print>
   <PageLayoutZoom>100</PageLayoutZoom>
   <Selected/>
   <Panes>
    <Pane/>
   </Panes>
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>


ワークシートごとにしたい場合は、基本的には  <Worksheet> 〜  </Worksheet> を繰り返せば、複数のワークシートが出来る。

アクセスする時は、.xls をつければ良いわけだから、
http://xxx.com/admin/users/index.xls
ページネートしたのを出力したい時は、
http://xxx.com/admin/users/index/page:3.xls
みたいなURLになるが無問題。

これでオッケー!超簡単!と思ってたら、出力されない??エラーも出ない。。なぜ?
CSVやXMLはこの手順だけだったのに?

わかんなければ、ソースを見るのがCakePHPの基本
あった、あった。
request_handler.php でファイルの定義をしてたのね、知らなかった。
そんで、当然.xlsはない。

追加すべきなんだけど、どっかのブログで beforeFilter() でやらないとダメというのを見かけたので(未確認)beforeFilterに追記する。

function beforeFilter() { 
    
parent::beforeFilter(); 
<
中略
    if(isset(
$this->params['url']['ext']) && $this->params['url']['ext'] == 'xls'){ 
        
$this->RequestHandler->setContent('xls', array('application/vnd.ms-excel''text/plain')); 
    } 
}


これで問題無く、.xls でダウンロードできた。
よかったよかった。


WordPressを始めてみた [WordPress]

CMSといえば、いままではずぅっっっっっとMTばかりで、他にはExpressionEngineを使った事がちょっとあったくらい。
MTは何かと処理の重さが気になるけど、それ以外は正直便利だし、手が届かないところがあっても、どうにかこうにか工夫したり、最悪プラグインを作ったりして対応できるので、かなり使い込んでいる。
特に、テンプレート周りは秀逸だと思う。DreamWeaverとの相性もいいし。

でも、それでは視野が狭くなってしまうので、食わず嫌いしていたWPをプライベートのプロジェクトで使ってみようと思い、3.1をインストールしてみた。

…まあ、初めてのシステムってのは、どうしても使いづらく感じてしまうよね。
結局は好き嫌いと慣れの問題だと思う。
複数ブログの管理がしづらいとかもあるけど、そもそもの設計思想の問題だと思うので、しょうがないし。

でも、テンプレートに生PHPを書くのは信じられない。とても。
せめてsmarty使えよとか、やりようはあったろうに。
EEのテンプレートの方が、良かったなー。
(EEが有料にさえならなければ…)

まあ、がんばってみるけど、仕事にはならなさそうな気がする。
タグ:wordpress CMS

とっくに明けてますがおめでとう [ActionScript]

このブログの存在を、まるっきり忘れてましたが、みなさん如何お過ごしでしょうか?

本年も宜しくお願いします。

昨年と同じく、クルクルまわるだけですが。
http://pub.sandman.jp/2011/newyear.html
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

iPad 終了〜

iPadをiTunesに接続すると、すごく調子が悪い。
とにかく、接続がしょっちゅう解除されてしまい、バックアップ取るのも一苦労。
同期->切断->再同期ー>また切断…の繰り返しで、鬱陶しいことこの上ない。

ソフトかOSが不安定なのかと思ったので、iPadを初期状態に復元して、再度アプリを追加しようと思い、復元を実行したら…!

D1000042.jpg
(わかりづらいけど、復元中の画面)

復元中に切断されてしまい、以後何をどうやってもこの画面のまま、まったく反応せず。

HDを初期化したところで切断したっぽいので、再度つなげてもiTunesでも認識しない…。
(iPadの)電源も切れないし、どうやったらいいんだ!?

今週末、AppleStoreに行かなきゃ駄目かな〜〜〜〜

PowerBookG3+UBUNTU10.04+Redmine0.9.4 [インターネット]

D1000040.jpg
事務所の片隅に転がっていたPBG3(私物)…。
数年前まではMac OS9の確認用として、微妙に活躍もしたのだけど、さすがにそれも無くなって来て、OSXも新しいのを入れられなくて、放置するより無かったんだけど。

ふと、ローカル共有できるRedmine機にしようと思い立って、やってみた。
下記からDLする。今回は、デスクトップはいらないので、サーバ版にした。
http://cdimage.ubuntu.com/ports/releases/lucid/release/

isoイメージをCD-Rに焼いて、ブート時にオプションを押し上げながら起動した状態。
D1000039.jpg
勿論、デュアルブートにする気は毛頭ないし、パーティションを切り直したから、この光景はここだけだけど。

UBUNTUはすんなりインストール完了して、次はRedmineを入れる準備。
ほとんど、下記のページを参考にして、そのまま出来た。
http://retujyou.com/2010/05/07/ubuntu-10-04-でインストールしたソフト、設定一覧/

ついでにphpmyadminもインストールした。
sudo apt-get install phpmyadmin

そうすると、/etc/phpmyadmin/ にインストールされるのだけど、そのままだとウェブからアクセスできない。
/etc/phpmyadmin/apache.conf を使えばいいだけで、方法はいろいろありそうだけど、自分は素直に/etc/apache2/httpd.confに
include /etc/phpmyadmin/apache.conf

として、apacheを再起動すると、http://192.168.1.X/phpmyadmin/ からアクセスできた。超簡単〜。
動作確認ついでに、redmine用のDBを作成する。

で、本命のRedmineのインストール。
http://redmine.jp/tech_note/install/

できたよ!しかも、思った程重くない!結構感動した。

これからも当分の間は、Redmineサーバとしてがんばってほしいなぁ。

GEEKs in TOKYOに行って来た [ActionScript]

GEEKs in TOKYO
Flash モーションプログラミング
http://event.67.org/geeks/flashmotion/
に行って来た。

Flashデベロッパー系のイベントには、初めて行くのでちょっとドキドキ。
客層は、おしゃれな人が多い印象かな。オタクでも、見かけには気を使っているタイプ。
プログラム系とは違い、女の子多し。

内容は、お金だしても行って良かったと思える内容。
奥田さんのプレゼンも楽しくてそれで良かったけど、城戸さんのプレゼンは、視点というものを考え直す、良いきっかけになった気がする。

はやく、プレゼン資料アップされないかなー。

んで、帰って来てから、ちょっとヘコんだ。
もちろん、彼らが出来ること(すべきこと)とオレのそれとは違うのだから、ヘコむ必要は無いのだけど、まー、ヘコむのも次への動力源ってことで。

#アフターパーティで相手してくれた方々は、どうもありがとうございました。

尾を引く残像 After Image [ActionScript]

Flashできれいに尾を引く残像を作りたかったのだけど、なかなか良いサンプルが無いので、試行錯誤してみた。

お、重い!
尾の部分をまともにShapeで作って、それを一つ一つ徐々に透明にしているので、光源は3つで限界。
尾をまとめてBitmapにしないとダメなんだろうが、今後の課題。



折角なので、wonderflに初めて投稿してみた。
wonderflは以前からぼちぼち参考にさせてもらっていて、自分でもちょっと使いたくなったので。
これ、ちょっとしたのを作るなら、普通のエディタより便利かも。
http://wonderfl.net/

寒中見舞いで使ったライブラリとか [ActionScript]

というわけで、間があいてしまったけど、寒中見舞いで使用したライブラリやソース元のご紹介です。

基本的には、PaperVision3D 2.1を使用しています。
Line3Dが数年前から気に入っているんですが、仕事で使ったことは無いので、未だに使い込めてません。Line3Dは下記を参考にさせて頂きました。
「Papervision3Dで3D空間にラインを描画する:5ive™.blog」
http://www.5ive.info/blog/archives/313

雪が降る部分とカメラの移動は、clockMaker Blog様のデモなどを、ほぼそのまま使わせて頂きました。これで制作時間が半分は短縮されましたね。

「Papervision3D 2.0で被写界深度表現(3):降り積もる雪 | ClockMaker Blog」
http://clockmaker.jp/blog/2008/08/papervision3d_snowfall_particle/
雪のぼかしに関しては、下記のサイトのをほぼそのまま使いましたが、雪の挙動については物理演算させたかったんで、jiglib使いました。
最終的に、雪を減らしたからあんまり意味が無かったんだけど、ばんばん降ってくると面白い。
http://www.jiglibflash.com/blog/

カメラの設定は下記から
「パーティクル表現のためのAS3ライブラリ「Stardust」 | ClockMaker Blog」
http://clockmaker.jp/blog/2009/12/as3-stardust/

下にひいてある文字は、テクスチャでも良かったんだけど、寄ると荒れるし、文字も動かす予定があったんで、Text3DとPotrAsを使いました。
「tnker.com - Papervision3DでText3DとPotrAsを使ってみる」
http://tnker.com/?p=629

こんな素晴らしい情報がすぐに手に入るなんて、良い時代になったような、それ以上の苦労が増えただけのような…。

ちなみに、3Dオブジェクトに関しては、六角大王を使用しました。
んで、一度LightWaveに読み込んで、ラインを引き直してから、.objで保存してます。

LWはラインでさくさく描けるソフトではないし、本当は六角大王から直で.objに保存したいんだけど、ライン情報は書き出してくれなくて、不便してます。
つーか、書き出せるのって、多分LWだけ。オレのは未だ7.5だけど。

寒中見舞い申し上げます [ActionScript]

新年早々、間に合いませんでした。
まー、あまりのあいかわらずさに、自分でも諦めてますが。

http://pub.sandman.jp/2010/newyear.html

とはいえ、松の内にできた!奇跡!
まあ、大したことはやってないっつーか、ウェブ上のソースをつぎはぎしただけなんだけど。。
お礼代わりに今度、ちゃんと紹介させていただきます。

重く感じたら、画面を小さめにしてご覧下さい。
マシンパワーに自信があるなら、右クリックで品質をHIGHでみてね。

そんなこんなで、今年もよろしくお願いいたします。

久しぶりの日記 [写真]

しばらくブリです。
書きたいことはたくさんあるんだけど、なんとなく放置気味でした。

Cake Matsuriに行きたかったなー。
行った人の日記を読めば読む程、残念な気分になるよ。

とはいえ、その時に何をしていたのかというと、ようやくとれた夏休みを使って、ラオスにいました〜
3362804

良かった!
一人で回ったんで、すごい疲れたけど、本当に行って良かった。
3362799

33628003362803

特に、世界遺産にもなっている、ルアンパバーンの街がのんびりしてて、素敵だったよ。

やっぱ、旅はいいなぁ。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。