[ カテゴリー » Programぽいの ]

勝手xlsでセル内改行

WebアプリでCSVを吐き出して、利用者様にはExcelで開いてもらう場合、おそらく巷で良く起こっていると思われる現象…
『電話番号の最初の"0"が表示されんぞゴルァLink

というわけで、CSV形式ではなく、Excelが直接読める形式にすることによって、Webアプリ側で書式設定を施す。という方法。

◎ヘッダーで、
Content-Type: application/vnd.ms-excel
Content-Disposition: attachment; filename="katte.xls"
◎ボディのHTMLヘッダで、
<style>
.string {mso-number-format:"¥¥@";}
</style>
◎ボディのHTMLボディでTABLE組んで、
<td style="string">09090909090</td>

というお話は今回のメインではないので、詳しく知りたい方は上記キーワードでググれかし。

で、上記方法で、セル内改行を行いたい場合に困った。
まずは、改行文字のみだと、その部分に空白が表示されるだけ。
というわけで、PHPでいうところのnl2br()で<br>タグに変換すると…
なんか、改行の数だけ行数が増えて、同行の改行なしのセルは勝手に結合されて、、、

グーグル先生に聞いてもご機嫌ナナメだし…
でも、ヒントは賜った。

Excelシート自体が検索に引っ掛かり、そのソースが表示された。
…実際に作ってソースを解析すればいいんだ。
さあ、Excelを起動、セル内改行を作って、「Webページとして保存」。テキストエディタで開く。
どんなスタイルを使っているんだ…?

紆余曲折を経て、
br {mso-data-placement:same-cell;}
brタグ全体に指定されてたのね…orz
セルに指定されたスタイルのどれが効いてるのか必死に探しちまったよ。
早く気付けよ、俺。

というわけで、さっきのスタイル指定を
<style>
br {mso-data-placement:same-cell;}
.string {mso-number-format:"¥¥@";}
</style>
な感じにしましょう。

PHP セル内改行 勝手xls csv

— posted by たか at 11:31 am   pingTrackBack [0]

perlでphpでいうところのfile_get_contentsを

なぜかperlを使わなければならなくなり…。
phpだったらfile_get_contentsなんだけどなぁ…。という訳で。

Webページの取得Link
use LWP::Simple;
my $cont = get('http://example.com/');
これで行けたっ!
useってなに?な状態だけど、魂塊(※)はそれでヨシ!もういいよ。
三項にならなくてゴメンナサイ。

※:今回を無理に誤変換した

ついでに書いておくと、Basic認証が必要な場合。
use LWP::Simple;
my $cont = get('http://example.com/gw.php?n=2');
if (!$cont) {
  $cont = get('http://id:pw@example.com/test/gw.php?n=2');
}
そう、サブディレクトリでテストしていて、そっちにはBasic認証かかってやがる。って場合に上記が使える。
さらに言うと、こちらはPHPで、あちらはPerlな*.cgiで、それぞれ開発してて、
いざ、ガッチャンコ!
…できねーよ。。
ナレーション『説明しよう。PHPさんとCGIさんは仲が悪くて共存できないのである。
ってな場合に、こんな風にすると良いんじゃないかと。
  • PHP側では、必要な情報を抽出してパーツとして出力するのみ
  • Perl側では、PHPにWebアクセスしてパーツを取得、表示したいところに埋め込む。
もちろん役割分担を逆にしても可。よきかなよきかな(by 水鏡先生@横山三国志)。


さて、もっと愚痴るか(^^;
PerlなあちらさんLink
昨今超スタンダードなPerl言語の勉強をする機会を提供して下さり、誠にありがとうございました。
感涙をこらえることができません。
厚かましいとは存じますが、ひとつご質問がございます。
御社が会社理念Link となされていらっしゃる、
CONSUITATION
SOLOUTION
とは何語ですか?
当方外国語の心得が無く、浅学の身にて、このような言語は目にしたことがございませんので、ご教授頂ければありがたく存じます。


注:カギ括弧"『"は閉じないのがオシャレなのです(自己満足

— posted by たか at 08:25 pm   pingTrackBack [0]

拡張子htmlのままPHPとして動かす場合

拡張子がhtmlなPHPファイルをそのままPHPとして動かす場合、HTML先頭の宣言がPHPとして解釈され、結果エラーとなる。
PHP開始タグを「
よって、この『ショートオープンタグ』設定を無効化すればよい。
ただ、この設定を行うためのディレクティブ"short_open_tag"なのだが、『変更の可否』がPHP_INI_ALL、ただし、
PHP <= 4.0.0 では PHP_INI_ALL、PHP < 5.3.0 では PHP_INI_PERDIR。
だそうで、PHP5.3.0以降なんてまだあまりつかわれていないだろうから、
PHP_INI_PERDIRであって、つまり『php.iniかApacheのhttpd.confか.htaccessで設定する必要がある』
ので注意が必要。。
(ini_set()できません、ってこと)


追記。あとから読んで、はてな?と思ったので。
上記で、PHP5.3.0以降の場合が書いてないじゃん、って思ったけど、最初に
    『変更の可否』がPHP_INI_ALL
って書いてあって、んで、
    PHP < 5.3.0 では PHP_INI_PERDIR
だから、PHP5.3.0以降はPHP_INI_ALLってことみたい。


というわけで.htaccessの例。
AddType application/x-httpd-php .html
php_flag short_open_tag off

ちゃんと動くかは環境次第なので、あしからず。

PHP

— posted by たか at 08:41 pm   pingTrackBack [0]

Flashで余所のページに飛んで戻ったときに最初っから表示しないようにする

例えば商品紹介Flashで、
1.Flash内でカテゴリーを選択
2.カテゴリーごとの商品が一覧表示される
3.商品を選ぶと商品購入ページに飛ぶ
4.ブラウザの戻るボタンでもどる
5.Flashが最初から再生される
6.再度カテゴリーを選択
...
これがまあ普通だった訳だが。
deep linking なる手法で解決する方法が発明されていたようで。

初めて見たのは、…って、紹介しようとしたら、かわっとるがや。
やめちゃったのか…なにか問題ありなの?やめてよ。。

やめないで~。やめないで~。やめて~。…やめるのをやめて~。っていうやりとりを思い出した。。
(O橋K泉議員辞職会見より)

基、上記フローの、「4」で「2」に戻りたい、という話。
こういうのLink を使うのが通例みたいだけど、
今回はもっと軽く実現したい。
というわけで、コレ。
Flashから任意のJavaScriptを走らせる+結果を受け取る!Link

受け取り
var locationHash:String = String(ExternalInterface.call("function(){return location.hash}"));
var categoryId:int = int(locationHash.substr(1));
言うまでもないが、文字列として使うならint()は不要。

カテゴリー切り替え時
ExternalInterface.call("function(h){location.hash=h}",categoryId);
こうしておくと、URLの最後に"#123"とかついて、他のページから戻ってきたとき受け取れる。


ここで、IEユーザーに朗報。
"swfobject.js"を使ってswfを配置すると、
var locationHash:String = String(ExternalInterface.call("function(){return location.hash}"));
trace(locationHash);

null
になって誤作動してくれるぞorz...

ありがとうIE、Microsoftバンザ~イ┐(’Д`)┌

"AC_RunActiveContent.js"だとダイジョぶみたいだけど。

— posted by たか at 07:29 pm   pingTrackBack [0]

 

Flashから任意のJavaScriptを走らせる+結果を受け取る!

Flashから任意のJavaScriptを走らせるLink
で書いたのはAS2のお話。
AS3では、ExternalInterfaceクラスを用いて外部スクリプトとやりとりする。
なんと、この方法だと、JavaScriptから結果を受け取ることもできるのだ!
なので、気軽に「swfを配置しているhtmlのURLを取得」とかできてしまう。

var locationHref:String = String(ExternalInterface.call("function(){return location.href}"));
ああ、ネタ元どっか行っちゃった。ゴメンナサイませ、ネタ元様。。

JavaScript as

— posted by たか at 07:20 pm   pingTrackBack [0]

T: Y: ALL: Online:
ThemeSwitch
Created in 0.0694 sec.
prev
2024.12
next
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
 
blogBar
Firefox3 Meter