uzullaがブログスマートフォン用の表示で見るuzullaがブログuzullaがブログです。2014-06-13Gotanda.pmで見かけたjs-xlsxをテストした件jsギョームで「データをエクセルでダウンロードできるようにしてね!(意訳、普通にエクセルで開けるデータをDLできるようにしてね!UTF8のCSVとかいうなんかオタク臭いみたことない形式のテキストはよくわかんないからやめてね!!)」としばしば言われるおじさんですこんにちは。#1(http://gotanda-pm.github.io/)で、tokuhiromさんがLTしていたjs-xlsxデモを手元でうごかしてみたので、その話です。js-xlsxとはJSでエクセルでひらけるxlsxが生成できる(DLできる)https://github.com/SheetJS/js-xlsxtokuhiromさんがデモを作成されています。https://github.com/tokuhirom/js-xlsx-demoこの記事はそれを試して見た話です。2048Mとか厳しい文字をかかざるをえなく、生きるのがつらい。サーバーはOutputBufferを切って、ゲロゲロとはき出すだけにしたい。*1だからって単なるcsvだとcp932(Sjis)じゃないとエクセル文字化けするし、いまどきUnicode通らないとかマジ切れそう!!ってなる(後述します)。(ただし、文字化けしないという未確認情報あり。私の手元ではUTF-8で化けないCSVを知らない)ということで期待を胸にテストしたまずtokuhiromさんのコードはAngularをつかっているが、俺はあんなオシャレな機能はいらないので、以下のようなコードに改変した。http://127.0.0.1:8080このサンプルの注意点として、セルの種類をs(tring)決め打ちにしているので、ちゃんとするならちゃんと書こう。tokuhiromさんのやつはちゃんとやっている。(Numberなのに、Typeをs指定すると、js-xlsxがエラーをだしてしまう)テストの件数やデータをかえたいときは、data.php修正してください、phpですけど大変雑なコードなので、みなさま一瞬で分かるとおもいます。結果10万セル(5万行、2列)くらいなら、Chromeのメモリ400Mbyte弱くらいあればまあ問題ない。(これはxlsxの処理というより、JSONをよみこんだ時点で300Mbyte位使うので、それがでかい)DLボタンを押して保存までしばらく待つが、まあこの処理はサーバーじゃなくてユーザーのCPU資源なので特に(俺は)気にしない*2。数千件なら一瞬で終わります。いうことで、これはまあ一般的には十分使い物になる感じです、やったね!!しかし...残念ながら私はコレをつかえない感じであった。🍣(寿司)が通らないのだ。UTF8MB4は無理っぽい。BOM有り、区切り文字タブ」のエセCSVを使い続ける事になるのだった...。寿司絵文字が通らないことをTwitterにかいたら、SheetJSの中の人がレスをくれて、サンプルをおくって調べて貰ったのだが、どうも利用しているライブラリに問題があるんだないんだという話になっている。原因は分かったらしいので、そのうち対応されるのかもしれない。*1:何らか集計必須なら、ダメですけど*2:このデモについていえば、ページロードが終わった時点で、JSONのDL自体は終わっている*3:寿司とかつかうの?正気ですか?とおもわれるかもしれませんが、当方のギョームはツイッタァ連携とか多くて、絵文字はやっぱり通したい(通さないとクレームになる)。FrameworkのMock相手にスクレイピングする、PHPUnit向け俺得ライブラリつく...新年明けましておめでとうございます。»プロフィールid:uzullauzullaがブログです。参加してきました!月別アーカイブ参加グループWindows開発者はてなブログをはじめよう!uzullaさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。