Top > OOoSF > JRuby > OverView

概要 Edit

マクロの実行 Edit

マクロの実行は def で定義した関数ごとになります。定義されている関数名を取得するために一度ファイルを ScriptingContainer で runScriptlet するため、マクロの実行ダイアログなどで表示する際にファイルは一度実行されます。

マクロの配置 Edit

JRuby スクリプトのファイルは user/Scripts/jruby (jruby は小文字) ディレクトリに配置します。このディレクトリ以下はサブディレクトリがあった場合でも *.rb ファイルはすべて認識されます。

マクロの編集 Edit

マクロの管理ダイアログからの編集は現在できません。

拡張機能でのマクロの配置 Edit

ScriptProviderForPython 側のバグのため無効になっています。

スクリプトコンテキスト Edit

$XSCRIPTCONTEXT

コンポーネントコンテキスト Edit

ctx = $XSCRIPTCONTEXT.get_component_context

サービスマネージャ Edit

smgr = ctx.get_service_manager

デスクトップ Edit

desktop = $XSCRIPTCONTEXT.get_desktop

ドキュメント Edit

doc = $XSCRIPTCONTEXT.get_document

日本語 Edit

JRuby ではスクリプト中でデフォルトで UTF-8 を使用しているため、スクリプトのファイルにマルチバイト文字が含まれる場合には UTF-8 にしておけば問題なく利用できます。

import Edit

Java でのように

import com.sun.star.frame.XComponentLoader

loader = Uno.query(XComponentLoader, desktop)
loader.load_component_from_url(
   "private:factory/swriter", "_blank", 
   0, com.sun.star.beans.PropertyValue[0].new)

struct Edit

普通のクラスと同じように new します。

rect = com.sun.star.awt.Rectangle.new()
rect.Width = 1000

constant Edit

クラスから const_get します。

com.sun.star.awt.FontWeight.const_get("BOLD"))

enum Edit

com.sun.star.table.CellHoriJustify.const_get("RIGHT")

インターフェースのクエリ Edit

Java で行うのと同じようにします。

ダイアログ Edit

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
def dialog_creation()
  dialog_url = "vnd.sun.star.script:Standard.Dialog1?location=application"
  ctx = $XSCRIPTCONTEXT.getComponentContext()
  dialog_prov = Uno.query(
    com.sun.star.awt.XDialogProvider, 
    ctx.getServiceManager().createInstanceWithContext(
    "com.sun.star.awt.DialogProvider", ctx))
  xdialog = dialog_prov.createDialog(dialog_url)
  
  xdialog.execute()
end

メッセージボックス Edit

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
def message(xdesktop, msg="", title="")
  xframe = xdesktop.getCurrentFrame()
  xwin = xframe.getContainerWindow()
  xpeer = Uno.query(com.sun.star.awt.XWindowPeer, xwin)
  xtoolkit = xpeer.getToolkit()
  xmessbox_factory = Uno.query(com.sun.star.awt.XMessageBoxFactory, xtoolkit)
  rect = com.sun.star.awt.Rectangle.new()
  message_box = xmessbox_factory.createMessageBox(
    xpeer, rect, "messbox", 1, title, msg)
  message_box.execute()
end

利用方法はこんな感じ。

 desktop = $XSCRIPTCONTEXT.getDesktop()
 xdesktop = Uno.query(com.sun.star.frame.XDesktop, desktop)
 
 message(xdesktop, "message")

実行するスクリプト一覧に表示される関数名 Edit

ツール - マクロ - Organize Macros - JRuby またはマクロの実行に表示される関数を指定します。

$EXPORTED_SCRIPTS に表示したい関数名を String の配列で指定します。変数が設定されていない場合にはすべての関数が表示されます。実際に定義されていない関数が配列にあった場合には取り除かれます。

$EXPORTED_SCRIPTS = ["messagebox_creation", "url_parse", "dialog_creation"]

例外 Edit

begin, rescue, end など

require Edit

.rb ファイルの require はスクリプトの置かれたディレクトリから可能です。実行前にカレントディレクトリをスクリプトの配置されたディレクトリに移動します。一般的なものは $: から検索されます。

JRuby マクロの管理ダイアログ Edit

.uno:ScriptOrganizer?ScriptOrganizer.Language:string=JRuby

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