「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:1961
現在:3


JavaScriptマクロについて

ページOpenOffice.org FAQの登録ページ
投稿者new_OOo3
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2010-03-16 00:24:13 (火)
OSWindowsXP
依存するページ
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

お世話になります。

以下の事を目的としてOpenOffice.org(以後OOo)マクロのJavaScriptを試用しています。

[ 目的 ]
JavaScriptにてマクロを記す事でWeb2.0の技術とOOoを連携させたい。
具体的な案はありませんが、妄想的にJavaScriptにてCalcデータとイントラネット上のDatabase(例えばMySqlやOracle)を連携させる事が出来れば、OOoの用途や可能性が拡がると思っています。

その第一歩として新規Calcファイルを開くマクロの作成及び実行を行いました。

***** JavaScriptマクロCode ***********

//Create new spreadsheet of Calc  LoadComponentFromUrl
//Messege Box
importClass(Packages.javax.swing.JOptionPane);
//Open 
importClass(Packages.com.sun.star.beans.PropertyValue);
importClass(Packages.com.sun.star.comp.helper.Bootstrap);
importClass(Packages.com.sun.star.comp.helper.BootstrapException);
importClass(Packages.com.sun.star.frame.XComponentLoader);
importClass(Packages.com.sun.star.lang.XMultiComponentFactory);
importClass(Packages.com.sun.star.uno.Exception);
importClass(Packages.com.sun.star.uno.UnoRuntime);
importClass(Packages.com.sun.star.uno.XComponentContext);

//Open Code
xContext = Bootstrap.bootstrap();
xMultiComponentFactory = xContext.getServiceManager();
oCalc = xMultiComponentFactory.createInstanceWithContext("com.sun.star.frame.Desktop", xContext);
xcomponentloader = UnoRuntime.queryInterface(XComponentLoader,oCalc);
loadURL = "private:factory/scalc";
propertyvalue = new Array();
xCalcComponent = xcomponentloader.loadComponentFromURL(loadURL, "_blank", 0, propertyvalue);

JOptionPane.showMessageDialog(null, "Sucess");

****************************************

上記CodeをOOoから開くRhino JavaScript Debugger にて実行するとError無く新規Calcファイルが開きます。
そこで、上記ファイルを「test.js」としてコマンドプロンプト上で以下のコマンドを実行した所、Errorが生じます。

C:\Down_load\OOo\uno\jsruntime\skip_registration\java -jar js.jar test.js

注) C:\Down_load\OOo\uno\jsruntime\skip_registrationはRhinoの実行ファイルjs.jarがあるDirectoryです。

*********エラーメッセージ内容************

js: "C:\Down_load\OOo\uno\jsruntime\skip_registration\test.js", line5: Function importClass mustbe called with a class; had "[JavaPackage com.sun.star.beans.PropertyValue]" instead.

******************************************

つきましては以下の質問にご回答を頂けます様お願いします。
[質問]
1)OOoのJavaScriptマクロIDEとして使われているRhino JavaScript Debuggerは特別なものですか?

2)OOoを開かずにRhino JavaScript Debuggerを起動させる事は可能ですか?

3)上記2)が可能ならば、その方法をご教示下さい。

4)OOoのJavaScriptマクロにて作成したマクロをコマンドラインで実行させる方法はありますか?

5)上記3)があればその方法をご教示下さい。

拙い質問文で申し訳ございませんが宜しくご回答頂けます様お願いします。


Rhino などについて

はにゃ? (2010-03-16 05:52:53 (火))

1) パッチが当たっていますが OOo 2.4 以降では Rhino 1.5 release 5 2004 03 25 です。長いことアップデートされていません。

2, 3) js.jar をクラスパスにおいて次のようなコマンドで起動できます。(OOo 付属のものはスクリプトファイルがうまく開けませんでした。)

java -cp path_to_js.jar org.mozilla.javascript.tools.debugger.Main


詳細は下記などを参照。
https://developer.mozilla.org/ja/Rhino_documentation

4, 5) 必要なファイル全てパスやクラスパスが通っている状態で次のようにします。

java -cp js.jar org.mozilla.javascript.tools.shell.Main -f test.js


まず、rhino を利用する場合には OOo とのやりとりは全て Java のクラスを利用します。
それを考慮してください。

実際は次のファイルが必要です。

  • OpenOffice.org 3\Basis\program\classes\unoil.jar
  • OpenOffice.org 3\URE\java\ridl.jar
  • OpenOffice.org 3\URE\java\jurt.jar
  • OpenOffice.org 3\URE\java\juh.jar

付属の js.jar でなくとも下記から入手した Rhino 1.7R2 でも後述するようなコードが実行できます。
http://www.mozilla-japan.org/rhino/download.html

ooo.connector.BootstrapSocketConnector を利用しているので注意。
コードを実行する前に OOo は次のような引数付きで起動済みです。

"-accept=socket,host=localhost,port=2083;urp;StarOffice.ServiceManager"


importClass(Packages.com.sun.star.uno.XComponentContext);
importClass(Packages.com.sun.star.comp.helper.Bootstrap);
//importClass(Packages.com.sun.star.lang.XMultiComponentFactory);
importClass(Packages.ooo.connector.BootstrapSocketConnector);
importClass(Packages.com.sun.star.uno.UnoRuntime);
importClass(Packages.com.sun.star.bridge.XUnoUrlResolver);
importClass(Packages.com.sun.star.frame.XComponentLoader);
importClass(Packages.com.sun.star.beans.PropertyValue);
importClass(Packages.com.sun.star.text.XTextDocument);
importClass(Packages.com.sun.star.text.XTextRange);

try{
	sURL = "uno:socket,host=localhost,port=2083;urp;StarOffice.ComponentContext"
	oooFolder = "E:/usr/local/OOo/OOo3.2/OpenOffice.org 3/program/";
	xRemoteContext = BootstrapSocketConnector.bootstrap(oooFolder);
	xRemoteMcf = xRemoteContext.getServiceManager();
	
	xResolver = UnoRuntime.queryInterface(
		XUnoUrlResolver, xRemoteMcf.createInstanceWithContext(
			"com.sun.star.bridge.UnoUrlResolver", xRemoteContext));
	context = xResolver.resolve(sURL);
	if (context != null) {
		//java.lang.System.out.println("connected.");
		xContext = UnoRuntime.queryInterface(XComponentContext, context);
		xMcf = xContext.getServiceManager();
		desktop = xMcf.createInstanceWithContext(
				"com.sun.star.frame.Desktop", xContext);
		xLoader = UnoRuntime.queryInterface(XComponentLoader, desktop);
		
		doc = xLoader.loadComponentFromURL("private:factory/swriter", "_blank", 0, new Array());
		xTextDoc = UnoRuntime.queryInterface(XTextDocument, doc);
		xText = xTextDoc.getText();
		xTextRange = UnoRuntime.queryInterface(XTextRange, xText);
		xTextRange.setString("Hello.");
	} else {
		java.lang.System.out.println("failed to connect.");
	}
} catch (e) {
	java.lang.System.out.println(e);
}

java.lang.System.exit(0);

無題

tani (2010-03-16 10:26:27 (火))

> JavaScriptにてマクロを記す事でWeb2.0の技術とOOoを連携させたい。

この部分でちょっとひっかかりを覚えます。ブラウザ上で動くJavaScriptはその動作の大部分をブラウザに依存していて、OOoのマクロで動くJavaScriptはその動作の大部分をOOoに依存しており、ほぼ別物と言って良いと思います。(同じC言語で実装さていれば、Windows向けアプリもLinux向けアプリも大して変わらない、と言われるのと同じような違和感を覚えます。)

何らかのプロトコルやファイルフォーマットでブラウザ(上のJavaScript)と連携することは可能でしょうが、そうするとOOo側は別にJavaScriptにこだわらなくても良いんじゃないかと思いました。

テキスト整形ルール

M.Kamataki (2010-03-16 10:28:53 (火))

new_OOo3さん、コードの部分などご投稿されたメッセージ部分を修正しました。コードを見やすくするなど、当サイトにはテキストの整形ルールがありますので、目を通しておくと良いですよ。

ありがとうございました。

new_OOo3 (2010-03-17 19:38:21 (水))

はにゃ? 様
分り易い説明とSampleコードまでご回答頂きまして本当にありがとうございます。
しかし「Rhino1.7R2」をDown Loadしたり、試行錯誤しましたが上手く動作しておりません。
更に「*.jar」でfile検索を行ったところ教えて頂きました下記fileが見つかりませんでした。

   * unoil.jar
   * ridl.jar
   * jurt.jar
   * juh.jar

これは私がJavaの基本(ClassファイルへのPath設定等)を理解していない事が原因だと思います。
Javaを勉強してから必要に応じて再質問させて下さい。
教えて頂きましたCodeやこれまで調べたJavaScriptマクロについては時期をみて公開させて頂きます。


tani 様
私もご指摘の通りだと思います。
一般書籍にて説明されているJavaScriptはBrowserの機能を利用している事はM.Kamataki 様から以前に教えて頂いておりました。
単細胞の為、Rhinoを介してOOoデータを簡単にBrowserで使えたら良いなと考えています。


M.Kamataki
いつもお世話になっております。
無様な質問文を投稿して申し訳ございません。
また、テキストを修正頂きました事についても併せてお礼を申し上げます。

実行例

はにゃ? (2010-03-17 21:35:09 (水))

例えば次のように実行します。
bootstrapconnector.jar は以下から
http://user.services.openoffice.org/en/forum/viewtopic.php?f=44&t=2520

長いので区切ってあります。

java -cp "js.jar;bootstrapconnector.jar; \
   E:\usr\local\OOo\OOo3.2\OpenOffice.org 3\Basis\program\classes\unoil.jar; \
   E:\usr\local\OOo\OOo3.2\OpenOffice.org 3\URE\java\ridl.jar; \
   E:\usr\local\OOo\OOo3.2\OpenOffice.org 3\URE\java\jurt.jar; \
   E:\usr\local\OOo\OOo3.2\OpenOffice.org 3\URE\java\juh.jar" \
   org.mozilla.javascript.tools.shell.Main -f test.js
お名前:
題名:


添付ファイル: fileRhino_Error.png 524件 [詳細] fileRhino_Debugger.png 497件 [詳細]