JavaScriptマクロについて †
ページ | OpenOffice.org FAQの登録ページ |
---|---|
投稿者 | new_OOo3 |
分類 | |
優先順位 | |
状態 | |
カテゴリー | |
投稿日 | 2010-03-16 00:24:13 (火) |
OS | WindowsXP |
依存するページ | |
バージョン |
メッセージ †
回答ページでは行末に「~」を付加する必要はありません |
お世話になります。
以下の事を目的として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