Top > OOobbs2 > 19

OOobbs2/19 Edit

  • サマリ: パッケージマネジャー
  • 環境: Calc
  • 状態: 解決不可判明
  • 投稿者: suou?
  • 投稿日: 2006-12-25 (月) 12:45:10

質問 Edit

いつも大変丁寧に教えて頂き感謝しております。 さて、OOo Basic マクロ配布パッケージのご説明の、パスワードで保護されたパッケージのセクションに、「パスワードで保護したパッケージはパッケージマネジャーからインストールすることができます。」という記述があります。この「パッケージマネジャー」とは何ですか?OpenOffice.orgのどこかから起動できるのですか?それともパッケージマネジャーを入手する必要がありますか? ライブラリにパスワードを付けると日本語の認識ができなくなったり、msgboxで表示させたい内容が????に文字化けしたりして、うまくいかなかったので、藁にもすがる思いで発見したのが「OOo Basic マクロ配布パッケージ」のページでした。でも、今度はパッケージマネジャーで引っかかってしまいました。どうぞ、よろしくお願い申し上げます。

回答 Edit

  • パッケージマネジャーは、OOo のメニューのツール - パッケージマネージャから起動されるものです。OOo 2.0 系から導入されました。これは、OOo から切り離された別の実行ファイルになっています。unopkg.exe などがこれにあたります。

パッケージマネジャーからインストールできるというのは、他の人に配布するときに容易にインストールしてもらえるといったことに利用します。

パスワード設定したライブラリで日本語が文字化けするということですが、私のところでも確認できました。パッケージマネジャーとは関係ありません。

日本語を msgbox に表示するときに文字化けしましたが、一応は次のようにすると文字化けせずに表示できました。しかし、使い物にはなりません。

Sub Main
  msgbox chr("&H4F5C")
  msgbox "作"
End Sub

chr では 16 bit の Unicode 指定ができます。「作」-> 4F5C

しかし、日本語の文字列の比較などを行うにはこんなことではやってられません。("&H4F5C" の &H は文字列の先頭につけることで十六進数表記にします)

  • はにゃ?? 2006-12-25 (月) 14:04:41
  • パッケージマネジャーのありかと使い方が分かりました。ありがとうございました。 -- suou? 2006-12-25 (月) 16:37:19
  • でも、ライブラリにパスワードを付けてuno.pkgに落としたものをパッケージマネジャーで追加してマクロを実行させると、やはり、文字化けが出てしまいました。これはファイルに付属したライブラリにパスワードを付けて実行させた場合と全く同じ現象でした。パッケージマネジャーでインストールしたもののパスワードをはずすと、文字化けはなくなります。おっしゃるとおり、文字列の比較やmsgboxへの表示で日本語を使いますから、窮地におちいってしまいました。何かよい解決法はあるでしょうか?マクロ中のどこかで、encoding='UTF-8'などの設定ができないものでしょうか? -- suou? 2006-12-25 (月) 16:51:38
  • 残念ですが、OOoBasic のライブラリは UTF-8 で管理されています。ライブラリのファイルをテキストエディタなどで開いてもらうとわかると思います。また、エンコードの指定はできないと思います。 -- はにゃ?? 2006-12-25 (月) 23:45:31
  • すこし試してみたところ、パスワードでロックした状態で文字化けしてしまっているようです。

OOoBasic のコード中で Asc 関数を利用してみたりしましたが、文字コードが変でした。

また、マクロの実行中に Calc のセルから取得した日本語文字列は文字化けしません。

なので、回避する方法としては

  1. パスワードロックしない
  2. 日本語などのマルチバイト文字列は chr で与える

1 は場合によりますので、改変されないようにするには不適当ですね。2 は大変ですが、ドキュメントなどから取得した文字列に関してはそのまま利用できるので、マクロを書くときが大変です。文字列を変換するだけでいいのですが。(以前利用しようとしたところ、chr で表示できない文字があったような気がしたのですが)

あと、Basic ダイアログに関してはダイアログのファイル自体はロックされないようです。OOo のダイアログエディタで編集しようとするとパスワード入力を促されますが、テキストエディタなどで編集が可能なようです。ですが、入力した日本語は文字化けしません。

  • はにゃ?? 2006-12-26 (火) 03:47:30
  • 早速のご教示ありがとうございました。あるライブラリにパスワードロックしたいのですが、これは暫らくあきらめるしかないようですね。ありがとうございました。 -- suou? 2006-12-26 (火) 07:14:20
  • 直接的な方法ではないですが、パスワード保護したライブラリから文字化けしない文字列の表示を間接的な方法で。
  1. 文字列だけ別のパスワード保護しないライブラリを用意してそこから取得
  2. configuration を利用

最初のものですが、別のライブラリを作成して文字列を返す関数などを用意しておく。

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

のようなコードをパスワード保護しても、最初のものは文字化けしますが二番目のものは文字化けしません。

どうしてもパスワード保護したいのであれば、文字列取得用のパスワード保護されていないライブラリを用意するまたは、設定ファイルを用意する。外部ファイルを用意する。

アドオンパッケージを作成するのであれば設定ファイルを用意すればいいのですが、そうでもなければ結構面倒です。でも保護しておくのであれば完成したライブラリでしょうから・・・

  • はにゃ?? 2007-07-21 (土) 16:40:43

感想,コメント,メモ Edit



Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes