2014年11月21日金曜日

カンマ区切りの列を、縦に整形して表示する方法

Kapowでロボットを組む際に、どうしようか考えていた。

特定の文言たちを1列にカンマ区切りで指定する仕様を検討中のため、
いくつ入ってくるかわからない。
それをKapowの変数に格納しなければならないが、それが可変では困る!

Kapowにとっては、ループで何行あろうが関係ないループ処理でできてくれるのが一番いい。

となると、MySQLで勘考してくれるのが一番だと考えた。
その結果が以下である。


SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(NGWord,',',v.n),',',-1) as NGwords
FROM (SELECT NGWord FROM test01) AS c,
               ( SELECT 1 n 
UNION ALL SELECT 2   
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5
UNION ALL SELECT 6
UNION ALL SELECT 7
UNION ALL SELECT 8
UNION ALL SELECT 9
UNION ALL SELECT 10
) AS v
WHERE  LENGTH(NGWord)-LENGTH(REPLACE(NGWord,',',''))+1 >=v.n


test01テーブルに、カンマ区切りの文字列が保持されているNGWordを用意して、
上記SQLを実行させた。
ただし仮にカンマ区切りで13個あったとしても、UNION ALLたちが10個までしかないため、
10個までしか出力されない。

どっちみち仕様として利用者には、「10個までならカンマ区切りで指定可能」と
言ってしまえば運用上問題なし!!

詳細なことは、以下のURLへ飛んでください。
(参考URL)
BAD DB設計に対するSQLパターン応用編1 カンマ区切りのカラムを列(縦方向に分解)Comments
http://d.hatena.ne.jp/IT7C/20130217/1361039857

2014年11月19日水曜日

phpExcelでの画像サイズと、EXCELの印刷時の注意

写真サイズの、Lサイズ(89×127)の場合。
$hoge->setHeight(336.3);
$hoge->setWidth(479.8);

setHeightとsetWidthに対して、
上記のように指定すると、Lサイズで画像がEXCELに出力される。
しかしEXCELの印刷プレビューをすると、少し大きく表示されてしまう。
画像の間隔に余白がない状態だ。
(Microsoftには、シートの状態と印刷プレビューの状態で見え方が異なる状態を早く直して頂きたい・・)
なお、余白はデフォルトのままである。
※ 上下:1.9、左右:1.8、ヘッダ&フッタ:0.8

従って、上記の設定値の95%を設定するが、
これでは確かに印刷プレビューではおさまっているようにみえるが、
最後の3ページ目がなぜか4ページ目にはみでてしまうため、さらに縮小する必要があった。
$hoge->setHeight(319.5);
$hoge->setWidth(455.8);

最終的には、初めの設定値の92%に収まった。
※ 次のページに少し出ない、ぎりぎりのサイズ
$hoge->setHeight(309.4);
$hoge->setWidth(441.4);

さらにEXCELの中身も注意しなければならない。
シート全体を印刷範囲クリアをしたとしても、
以前に編集したことがあれば、その部分まで印刷されてしまう。
つまり3ページで画像が終わりだとしても、空白の状態で4・5ページ目が出力される。
よってそういうときは、該当行をすべて削除してしまえばいい。

2014年11月18日火曜日

phpExcelの画像サイズが統一されない原因について


setHeightとsetWidthで指定をしても、画像が統一されていなかったが、
それはデフォでは、「縦横比を固定する」が効いているからである。
したがって、ソースに
「$hoge->setResizeProportional(false);」
を追加してあげて、固定しないとすれば問題ない。


(参考)
 http://docolog.cocolog-nifty.com/papalog/2012/02/php-phpexcel-f9.html

phpExcelについて


PHPからEXCELを出力するライブラリがあるが、
こちらの注意点を2点列挙する。

(1)
ソースファイルをUTF-8で保存する際に、
BOMを付加させて保存すると、EXCEL出力時にファイルが壊れているとエラーメッセージが表示されて、開くことができない。

(2)
EXCELに貼り付ける画像の縦横を調整する、setWidthAndHeightなどが存在するが、決して指定したどおりに全ての画像がそろってくれるわけではない。
つまり貼り付けるオリジナルの画像の大きさがバラバラだとしたら、出力されたEXCEL内の画像もバラバラだったりする。