秋葉原のソフマップでASUSのZenBook (Ultrabookとか呼ばれてるらしい) を購入。
http://zenbook.asus.com/jp/
CPUとかメモリとかが劇的に増えてるわけじゃないけど、SSDのおかげか、マシンの起動とか、LibreOfficeの起動とか、めっちゃ速なっとる。何かこの速さをいかした使い方をしてみたいと思いつつ思いつかないけど。
旧日記 http://blog.good-day.net/~tani/diary/ から、こっちへ本格的に移転中。
本ページは谷 列樹(たに つらき)の備忘録です。
実在の団体・人物とは関係ないと思います。
2011年12月26日月曜日
2011年12月12日月曜日
OOo(libreOffice) BasicでEval
ExelのVBAでは、文字列で渡された計算式を実行するためのApplication.Evaluate()ってメソッドがあるけど、OOo(LibreOffice)では見当たらなかったので。
ググると、以下のような投稿を発見。
http://www.oooforum.org/forum/viewtopic.phtml?t=58809
これの一番最後に答えが書いてあって、ようはJavaScriptのEvalを使って計算を行うマクロを作っておいて、それをOOo Basicから呼び出すというコード。まず、以下のようなJavaScriptの一行マクロをドキュメントのLibrary1のEvalCell.jsとして作成。
dResult = eval(String(ARGUMENTS[0]));
んで、そのあと以下のようなOOo Basicのコードで呼び出す、って感じ。
Function Eval(s as String) as Double
oDocScriptProvider = ThisComponent.getScriptProvider()
oScript = oDocScriptProvider.getScript("vnd.sun.star.script:Library1.EvalCell.js?language=JavaScript&location=document")
On Error Resume Next
Eval = oScript.Invoke(Array(s), Array(1), Array(dResult))
On Error Goto 0
End Function
ググると、以下のような投稿を発見。
http://www.oooforum.org/forum/viewtopic.phtml?t=58809
これの一番最後に答えが書いてあって、ようはJavaScriptのEvalを使って計算を行うマクロを作っておいて、それをOOo Basicから呼び出すというコード。まず、以下のようなJavaScriptの一行マクロをドキュメントのLibrary1のEvalCell.jsとして作成。
んで、そのあと以下のようなOOo Basicのコードで呼び出す、って感じ。
Function Eval(s as String) as Double
oDocScriptProvider = ThisComponent.getScriptProvider()
oScript = oDocScriptProvider.getScript("vnd.sun.star.script:Library1.EvalCell.js?language=JavaScript&location=document")
On Error Resume Next
Eval = oScript.Invoke(Array(s), Array(1), Array(dResult))
On Error Goto 0
End Function
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ファイルだとトラブルでるかも。
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で読み込むと、当たり前ですが、ちゃんと難しい漢字が(フォントが入ってれば)出ます。
内部的にはどっちも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デコードする必要がありますが、コード修正の手間とのトレードオフってことで。
そもそも、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に出力できましたよ、くらいの抑えた発表はできなかったのだろうか。なんか素人さんを騙してるみたいな感じを受けました。
どーもGTKとHTML5の合わせ技で画面イメージをブラウザに飛ばしてるだけっぽいです。(GIMPとか他のアプリでも同様に画面を飛ばせるっぽい)
シンクライアントの一方式としては、アリだとは思いますが、LibreOfficeオンライン版ドヤッて出すんじゃなくて、LibreOfficeでもHTML5に出力できましたよ、くらいの抑えた発表はできなかったのだろうか。なんか素人さんを騙してるみたいな感じを受けました。
2011年10月5日水曜日
LotusLive Symphony
というIBM製のGoogle Docs(?)が試せるらしいということで、LotusLiveの試用アカウントを作ってみた。(パスワードの長さ制限とかルールが若干うざくて、試用アカウントの登録にちょっとすったもんだした)
んで、さっそくログインするも、初期画面(マイ・ダッシュボード)からどうやったら試せるのかわからずに、あれこれしてると、LotusLive Labsの中にあるのを発見。
Windows上のFirefoxとUbuntu上のChromeで試したけど、ドキュメントの編集画面に入る前まではちゃんと日本語化されてるし、ドキュメントの編集画面は普通にAjaxでぐりぐり動作しとる。アップロードしたods内のグラフが表示されてなかったり、ダウンロードしたodsが壊れてたりしたけど、実験中のサービスでここまで動いてるなら、まぁいいのかなーという感じ。
んで、さっそくログインするも、初期画面(マイ・ダッシュボード)からどうやったら試せるのかわからずに、あれこれしてると、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万行とかあってもサクッと処理できてちょっとうれしい)、素の表に重複数のカラムを追加するのが目的だったので。メモ。
結果が返ってくるまで2, 30分とか待たされたり、うまく重複がカウントできていない行があったり。(OOoとLibreOfficeが似たような挙動になるのはわかるけど、何故かExcelまで似たような挙動)
んで、しゃーないから、目的の列でソートしたあと、一個上と比較してカウントしたりする数式を作ってしのいだ。統計的なデータだけならLibreOfficeのピボットテーブルが使いやすいんだけど(しかも10万行とかあってもサクッと処理できてちょっとうれしい)、素の表に重複数のカラムを追加するのが目的だったので。メモ。
2011年9月26日月曜日
つぃったー ウィジェット
右側が寂しいので、つぃったーでも表示させてみようかと、調べてみると、
ようはつぃったーさんが提供してくれてるJavaScriptのコード(ウィジェット)を
貼りつけるだけでいけるみたいなので、やってみた。
結構アレなことも書いてるので、あまりにも恥ずかしかったら外そう。
ようはつぃったーさんが提供してくれてるJavaScriptのコード(ウィジェット)を
貼りつけるだけでいけるみたいなので、やってみた。
結構アレなことも書いてるので、あまりにも恥ずかしかったら外そう。
2011年9月20日火曜日
2011年9月14日水曜日
OOo(Windows版)のアンインストール時に開くサイト
OOo(Windows版)のアンインストール時に開くサイトに関してちょっと調べたのでメモ。
URLは、設定ファイル類はなくて、ソースのsetup_native/source/win32/customactions/relnotes/relnotes.cxxに
"http://surveys.services.openoffice.org/deinstall"
って直書きされてるのを発見。
ここを書き換えて、独自ビルドしたら、飛ばす先は変えられそう。
で、このサイトを開く動作の呼び出しは、ソースのscp2/source/ooo/windowscustomaction_ooo.scpに書いてあって、
WindowsCustomAction gid_Customaction_ShowSurvey
Name = "ShowSurveyAfterUninstall";
Typ = "65";
Source = "relnotes.dll";
Target = "ShowSurveyAfter";
Inbinarytable = 1;
Assignment1 = ("InstallExecuteSequence", "REMOVE=\"ALL\" and Not UPGRADINGPRODUCTCODE", "end");
End
となってる。これ、どうもmsiファイルのテーブル定義らしく、msiの中身をみれるツールで見てみると、確かにそのものズバリの項目があったので、それを削除したmsiでOOoのインスコしてみると、アンインストール時にブラウザが開かれなくなった。
追記:LibreOfficeのWindows版ではこの機能なさそう。(http://cgit.freedesktop.org/libreoffice/bootstrap/tree/scp2/source/ooo/windowscustomaction_ooo.scp)
URLは、設定ファイル類はなくて、ソースのsetup_native/source/win32/customactions/relnotes/relnotes.cxxに
"http://surveys.services.openoffice.org/deinstall"
って直書きされてるのを発見。
ここを書き換えて、独自ビルドしたら、飛ばす先は変えられそう。
で、このサイトを開く動作の呼び出しは、ソースのscp2/source/ooo/windowscustomaction_ooo.scpに書いてあって、
WindowsCustomAction gid_Customaction_ShowSurvey
Name = "ShowSurveyAfterUninstall";
Typ = "65";
Source = "relnotes.dll";
Target = "ShowSurveyAfter";
Inbinarytable = 1;
Assignment1 = ("InstallExecuteSequence", "REMOVE=\"ALL\" and Not UPGRADINGPRODUCTCODE", "end");
End
となってる。これ、どうもmsiファイルのテーブル定義らしく、msiの中身をみれるツールで見てみると、確かにそのものズバリの項目があったので、それを削除したmsiでOOoのインスコしてみると、アンインストール時にブラウザが開かれなくなった。
追記:LibreOfficeのWindows版ではこの機能なさそう。(http://cgit.freedesktop.org/libreoffice/bootstrap/tree/scp2/source/ooo/windowscustomaction_ooo.scp)
2011年9月8日木曜日
VBAからパスワードつきPPTファイルを開く (Office 2003)
VBAからパスワード付きPowerPointファイルを開く、ってのはどうも普通にやっても無理くさい。(ファイルを開くOpenメソッドがパスワードのパラメータを持っていない)
SendKeysで、無理やりパスワードのキーコードをPowerPointさんに送りつけるってやり方もあるらしいけど、謎のタイミング勝負になってしまうので、このやり方は、やめといたほうが無難。
で、何回もぐぐった結果、パッチがあたったOffice 2003なら、Application.Presentations.Open("ファイルパス", オプション...)のファイルパス部分にくっつけて、"C\TEMP\hogehoge.ppt::fugafuga"みたいな感じで、指定できるとのこと。(fugafugaが開くパスワード)
http://support.microsoft.com/kb/916154/en
SendKeysで、無理やりパスワードのキーコードをPowerPointさんに送りつけるってやり方もあるらしいけど、謎のタイミング勝負になってしまうので、このやり方は、やめといたほうが無難。
で、何回もぐぐった結果、パッチがあたったOffice 2003なら、Application.Presentations.Open("ファイルパス", オプション...)のファイルパス部分にくっつけて、"C\TEMP\hogehoge.ppt::fugafuga"みたいな感じで、指定できるとのこと。(fugafugaが開くパスワード)
http://support.microsoft.com/kb/916154/en
LibreOfficeのAPIリファレンス
ができたらしいので。
http://api.libreoffice.org/
http://api.libreoffice.org/docs/common/ref/com/sun/star/module-ix.html
まだググれないみたいだけど。メモ。
http://api.libreoffice.org/
http://api.libreoffice.org/docs/common/ref/com/sun/star/module-ix.html
まだググれないみたいだけど。メモ。
2011年9月5日月曜日
VBAのApplication.FileSearch
VBAのApplication.FileSearchはOffice2007以降からは廃止されてるので、使わない方が良いとされてるけど、ディレクトリを再帰的に検索したいときとかは楽ちんなのでつい使ってしまいます。(てか楽にプログラムできることがウリのVBAなのに、再帰関数とか実装すんの、めんどくさすぎ)
んで、そのApplication.FileSearchで、ファイルがあるはずなのに、検索できないというトラブルがあったのでメモ。
原因は、Windows XPの検索機能のインデックスが更新されていなかったことで、Excelのファイル→ファイル検索で出てくる左側ペインの検索オプションというリンクで「いいえ、インデックスサービスを開始しません」を選ぶと解決。
んで、そのApplication.FileSearchで、ファイルがあるはずなのに、検索できないというトラブルがあったのでメモ。
原因は、Windows XPの検索機能のインデックスが更新されていなかったことで、Excelのファイル→ファイル検索で出てくる左側ペインの検索オプションというリンクで「いいえ、インデックスサービスを開始しません」を選ぶと解決。
2011年9月4日日曜日
前のデータの救出
とりあえず前の/home/tani/からTdiaryのデータをtar.gzに固めてSCPでもってきた。
さて、どうすっかなー。
http://geodenx.blogspot.com/2010/01/migration-from-tdiary-to-blogger.html
このへんみながらボチボチやろうかと思っているところ。
さて、どうすっかなー。
http://geodenx.blogspot.com/2010/01/migration-from-tdiary-to-blogger.html
このへんみながらボチボチやろうかと思っているところ。
登録:
投稿 (Atom)