2011年11月24日木曜日

Calc(OOo, LibreOffice)のSylkファイル

に関してどーなってんの?と聞かれたのでちょいソースを見てみた。
http://svn.services.openoffice.org/opengrok/xref/Current%20(trunk)/sc/source/ui/docshell/impex.cxx
http://cgit.freedesktop.org/libreoffice/calc/tree/sc/source/ui/docshell/impex.cxx

この中のScImportExport::Doc2SylkとScImportExport::Sylk2Docってのが実体みたい。
中身は割と朴訥な感じで、セルの内容にXとかYとかくっつけてテキストに吐き出したり、逆にテキストファイルの中身を総なめしてXとかYとか出てきたらそこのセルにテキストを展開したり、ってことをやってるみたい。
Excelが出してくるやつより、かなりシンプルになるんじゃなかろうか、と思って実際出来たSylkファイルを比べてみると、やっぱりかなり違います。

もし昔のアプリケーションとかで、Exelが出すSylkファイルを取り込んで云々するものがあれば、OOo(LibreOffice)で作ったSylkファイルだとトラブルでるかも。

2011年11月1日火曜日

中国語MS OfficeでVBA

中国語MS OfficeでVBAマクロを作成し、それを日本語MS Officeで読み込むと文字化けします。(多分逆もそうなんじゃないか。)
内部的にはどっちもUnicodeを使ってるはずなので、UnicodeをUnicodeのまま素直に表示してくれるだけで良いはずなのに、どうも何か無駄な変換がかかってるようです。やっぱ過去のしがらみとかが関係してるのかな。

ちなみに同じ中国語ファイルをLibreOfficeで読み込むと、当たり前ですが、ちゃんと難しい漢字が(フォントが入ってれば)出ます。

VBAでテキスト出力(中国語)

VBAでテキスト出力する際に、素直に、Open hogehoge For Output As #i とかやるけど、中国語が混じってきたときに問題が発生したので、メモ。


そもそも、Windowsも、MS Officeも、その中のVBAも、全部Unicodeで処理されてるっぽいので、ファイル名だの、ファイルの中だのに中国語が入っていても問題ないけど、VBAからテキスト出力するときだけは、過去との互換性のためか、勝手にShift_JISに変換されちゃいます。
んでそこに中国語が入ってきたときに、あれやこれや問題が発生します。文字化けしたり、書き込みエラーになったり。
(多分OOoとかLibreでも似たような問題発生するんじゃなかろうか。。。)


対応策としてまず考えたのは、バイナリモードでUnicodeをそのまま出力することですが、割と修正箇所が多くて、文字列をバイト配列に変換したり挿入箇所を指定したり改行コード挿し込んだりが、めんどっちかったので、とりあえず文字列をURLエンコードして凌ぐことに。CreateObject("ScriptControl")とかしてJavaScriptの変換関数を呼び出すと簡単にできます。(MS Office 2010とか64bit版とかだと使えないって噂がありますが)


出力されたテキストを読むときはURLデコードする必要がありますが、コード修正の手間とのトレードオフってことで。

2011年10月17日月曜日

LibreOfficeオンライン版?

LibreOfficeオンライン版とか聞くと、普通は、Google Docsとか、LotusLive Symphonyとか、Microsoft Office Web Apps(Office365?)とか、そういう純粋なWebアプリを連想しますが、LibreOfficeオンライン版は違う模様。
どーもGTKとHTML5の合わせ技で画面イメージをブラウザに飛ばしてるだけっぽいです。(GIMPとか他のアプリでも同様に画面を飛ばせるっぽい)
シンクライアントの一方式としては、アリだとは思いますが、LibreOfficeオンライン版ドヤッて出すんじゃなくて、LibreOfficeでもHTML5に出力できましたよ、くらいの抑えた発表はできなかったのだろうか。なんか素人さんを騙してるみたいな感じを受けました。

2011年10月5日水曜日

LotusLive Symphony

というIBM製のGoogle Docs(?)が試せるらしいということで、LotusLiveの試用アカウントを作ってみた。(パスワードの長さ制限とかルールが若干うざくて、試用アカウントの登録にちょっとすったもんだした)
んで、さっそくログインするも、初期画面(マイ・ダッシュボード)からどうやったら試せるのかわからずに、あれこれしてると、LotusLive Labsの中にあるのを発見。
Windows上のFirefoxとUbuntu上のChromeで試したけど、ドキュメントの編集画面に入る前まではちゃんと日本語化されてるし、ドキュメントの編集画面は普通にAjaxでぐりぐり動作しとる。アップロードしたods内のグラフが表示されてなかったり、ダウンロードしたodsが壊れてたりしたけど、実験中のサービスでここまで動いてるなら、まぁいいのかなーという感じ。

2011年9月28日水曜日

COUNTIF関数

10万行くらいのテキストデータ(しかも個々のテキストが結構長い)の重複をカウントしたくて、DBでGROUP BYとか組み合わせたやけに長いSQLを組んでもみてもよかったけど、表計算アプリ上でさくっとできないかな、と思って、OOoとLibreOfficeとExcelでCOUNTIF関数を使ってみた。結果的にどれもうまくいかず、かえって時間がかかるはめに。

結果が返ってくるまで2, 30分とか待たされたり、うまく重複がカウントできていない行があったり。(OOoとLibreOfficeが似たような挙動になるのはわかるけど、何故かExcelまで似たような挙動)

んで、しゃーないから、目的の列でソートしたあと、一個上と比較してカウントしたりする数式を作ってしのいだ。統計的なデータだけならLibreOfficeのピボットテーブルが使いやすいんだけど(しかも10万行とかあってもサクッと処理できてちょっとうれしい)、素の表に重複数のカラムを追加するのが目的だったので。メモ。

2011年9月26日月曜日

つぃったー ウィジェット

右側が寂しいので、つぃったーでも表示させてみようかと、調べてみると、
ようはつぃったーさんが提供してくれてるJavaScriptのコード(ウィジェット)を
貼りつけるだけでいけるみたいなので、やってみた。
結構アレなことも書いてるので、あまりにも恥ずかしかったら外そう。