OOobbs2/19
質問
いつも大変丁寧に教えて頂き感謝しております。 さて、OOo Basic マクロ配布パッケージのご説明の、パスワードで保護されたパッケージのセクションに、「パスワードで保護したパッケージはパッケージマネジャーからインストールすることができます。」という記述があります。この「パッケージマネジャー」とは何ですか?OpenOffice.orgのどこかから起動できるのですか?それともパッケージマネジャーを入手する必要がありますか? ライブラリにパスワードを付けると日本語の認識ができなくなったり、msgboxで表示させたい内容が????に文字化けしたりして、うまくいかなかったので、藁にもすがる思いで発見したのが「OOo Basic マクロ配布パッケージ」のページでした。でも、今度はパッケージマネジャーで引っかかってしまいました。どうぞ、よろしくお願い申し上げます。 回答
パッケージマネジャーからインストールできるというのは、他の人に配布するときに容易にインストールしてもらえるといったことに利用します。 パスワード設定したライブラリで日本語が文字化けするということですが、私のところでも確認できました。パッケージマネジャーとは関係ありません。 日本語を msgbox に表示するときに文字化けしましたが、一応は次のようにすると文字化けせずに表示できました。しかし、使い物にはなりません。 Sub Main msgbox chr("&H4F5C") msgbox "作" End Sub chr では 16 bit の Unicode 指定ができます。「作」-> 4F5C しかし、日本語の文字列の比較などを行うにはこんなことではやってられません。("&H4F5C" の &H は文字列の先頭につけることで十六進数表記にします)
OOoBasic のコード中で Asc 関数を利用してみたりしましたが、文字コードが変でした。 また、マクロの実行中に Calc のセルから取得した日本語文字列は文字化けしません。 なので、回避する方法としては
1 は場合によりますので、改変されないようにするには不適当ですね。2 は大変ですが、ドキュメントなどから取得した文字列に関してはそのまま利用できるので、マクロを書くときが大変です。文字列を変換するだけでいいのですが。(以前利用しようとしたところ、chr で表示できない文字があったような気がしたのですが) あと、Basic ダイアログに関してはダイアログのファイル自体はロックされないようです。OOo のダイアログエディタで編集しようとするとパスワード入力を促されますが、テキストエディタなどで編集が可能なようです。ですが、入力した日本語は文字化けしません。
最初のものですが、別のライブラリを作成して文字列を返す関数などを用意しておく。 Function GetLabel1 Getlabel1 = ( "日本語" ) End Function 別のライブラリから呼び出すときには BasicLibraries.LoadLibrary("LibName") LibName.ModuleName.GetLabel1 などが必要かもしれません。 二つ目は、設定ファイルを用意しておくものですが、設定ファイルをインストールする必要が出てきます。
のどちらかの場合には利用できますが、Basic のライブラリのみというわけには行きません。 config.xcs ファイル <?xml version='1.0' encoding='UTF-8'?> <oor:component-schema oor:name="config" oor:package="enc_test" xml:ang="en-US" xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <templates> <group oor:name="Labels"> <prop oor:name="Label" oor:type="xs:string" oor:localized="true"/> </group> </templates> <component> <set oor:name="Labels" oor:node-type="Labels"/> </component> </oor:component-schema> config.xcu ファイル <?xml version='1.0' encoding='UTF-8'?> <oor:component-data xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:name="config" oor:package="enc_test"> <node oor:name="Labels"> <node oor:name="Label1" oor:op="replace"> <prop oor:name="Label" oor:type="xs:string"> <value xml:lang="ja">文字化け</value> </prop> </node> </node> </oor:component-data> を用意して META-INF/manifest.xml に <?xml version="1.0" encoding="UTF-8"?> <manifest:manifest> <manifest:file-entry manifest:full-path="config.xcs" manifest:media-type="application/vnd.sun.star.configuration-schema"/> <manifest:file-entry manifest:full-path="config.xcu manifest:media-type="application/vnd.sun.star.configuration-data"/> </manifest:manifest> として作成した設定用パッケージを拡張機能マネージャーからインストールしておけば Sub Main msgbox "文字化け" msgbox GetConfig("/enc_test.config/Labels/Label1","Label") End Sub Function GetConfig(sNode,sName) As String Dim oProvider As Object, oConfigReader As Object Dim oNode(0) As New com.sun.star.beans.PropertyValue oProvider = CreateUnoService("com.sun.star.configuration.ConfigurationProvider") oNode(0).Name = "nodepath" oNode(0).Value = sNode oConfigReader = oProvider.createInstanceWithArguments( _ "com.sun.star.configuration.ConfigurationAccess", oNode ) GetConfig = oConfigReader.getByName(sName) End Function のようなコードをパスワード保護しても、最初のものは文字化けしますが二番目のものは文字化けしません。 どうしてもパスワード保護したいのであれば、文字列取得用のパスワード保護されていないライブラリを用意するまたは、設定ファイルを用意する。外部ファイルを用意する。 アドオンパッケージを作成するのであれば設定ファイルを用意すればいいのですが、そうでもなければ結構面倒です。でも保護しておくのであれば完成したライブラリでしょうから・・・
感想,コメント,メモ
|