科学サークルwiki FrontPage

<20130307 MK記入>

  • Libreoffice4がリリースされた。搭載されたPythonもver3である。Basicでマクロをやるのでは面白くないのでPythonを試して見る。
テストを行ったOSはWindows7pro32bit
参考にしたweb
http://openoffice3.web.fc2.com/Python_Macro_IDE.html#OOoIDE01
http://oooug.jp/faq/index.php?faq%2F5%2F461
http://blog.mwsoft.jp/article/34204551.html
http://openoffice-docj.sourceforge.jp/document/tips/using_java_samples.html
http://api.libreoffice.org/examples/DevelopersGuide/examples.html
LibreofficeにはLibreBasecというBasicマクロ環境は付いているがPythonマクロの環境は無いので自分で統合環境を作って使用する必要がある。
但しPython3がLibreoffice4には初めから組み込まれている。
  • 統合環境の準備 Eclipse
Eclipseという統合環境(開発環境)を使ってプログラムをする
インストール済みのLibreofficeのPathを調べる。 
Program Files下のLibreoffice 4.0\programにあるpython.exeを実行
>> import os
>> os.environ['URE_BOOTSTRAP']
>> os.environ['PATH']
>> os.environ['UNO_PATH']
このときの環境変数を調べる。
http://www.eclipse.org/downloads/ からEclips classicをダウンロードし解凍
Windows7のコントロールパネルのsystemでLibreofficeのpython.exeとuno.pyのPATHを設定する。
C:\Program Files\Libreoffice 4.0\program\ を環境変数PATHに追加
Eclipse 作業スペース PATHの設定
C:\Users\Owner\AppData\Roaming\LibreOffice\4\user\Scripts\python
Pydev(Eclipseプラグイン)の設定
EclipsのヘルプからInstall New Sosftwareを選択 
WorkwithにPydevのURLを記入しAddする
http://update-production-pydev.s3.amazonaws.com/pydev/updates/site.xml
nameはPydevとする
注意など出るがnextとI acceptedで最後まで行きresetで再起動
Eclipseの環境を設定する。
EclipseのwindowからPrefarencesを開き左のツリーからPydevを選びInterpreter-Pyshonを選択する。
Python Interpreterのロケーションを設定するのでNewをクリック
名前は適当にPython3.3.0にした。ロケーションを選んでpython.exeを選択
C:\Program Files\Libreoffice 4.0\program\python.exe
System libを自動で聞いてくるので全てを選択した。
Pydev環境変数の設定
PATH            C:\Program Files\Libreoffice 4.0\program\;C:\Program Files\Libreoffice 4.0\URE\bin
UNO_PATH        C:\Program Files\Libreoffice 4.0\program\
URE_BOOTSTRAP   vnd.sun.star.pathname: C:\Program Files\Libreoffice 4.0\program\fudamental.ini   

Eclipseのwindow等からOpen Perspectiveを選びJavaからPydevに切り替える。
  • Eclipseの操作
fileのnewからPyDev Projectを選ぶproject名はLibrePytonとした。
Libreoffice4のpythonのバージョンは3だったのでgrammer versionは3.0にした。
今回はsrcフォルダーをつくるのでcreate 'src' folder and add it to the PYTHONPATH?を選んで必要なPATHをチェックした。
file→new→folderでsrcフォルダーの下にpythonフォルダーを作成
さらにpythonフォルダーの下にpythonpathフォルダーを作成
LibreofficePython  - src下にunopy.py fileを作成
#!     # unopy.py
# -*- coding: utf_8 -*-
 
import uno
import unohelper
 
from com.sun.star.script.provider import XScriptContext
 
class ScriptContext(unohelper.Base, XScriptContext):
    def __init__(self, ctx):
        self.ctx = ctx
    
    def getComponentContext(self):
        return self.ctx
    
    def getDesktop(self):
        return self.ctx.getServiceManager().createInstanceWithContext("com.sun.star.frame.Desktop", self.ctx)
                
    def getDocument(self):
        return self.getDesktop().getCurrentComponent()
 
def connect():
    ctx = None
    try:
        localctx = uno.getComponentContext()
        resolver = localctx.getServiceManager().createInstanceWithContext(
            "com.sun.star.bridge.UnoUrlResolver", localctx)
        ctx = resolver.resolve(
            "uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext")
        if ctx:
            return ScriptContext(ctx)
    except:
        pass
    return None


  • Libreofficeをサーバーとして起動させるテスト
LibreLissen.batを作成しPython.exeのフォルダーに置く
動作確認時には、LbOクイック起動は終了しておくこと。
LbOの起動が確認されるとOK
cd \
"C:\Program Files\LibreOffice 4.0\program\soffice.exe"
 "-accept=socket,host=localhost,port=2002;urp;StarOffice.ServiceManager" 
LbOが交信しているのを確認。コマンドラインから。
TCP 127.0.0.1:2002 0.0.0.0 LISTNING  などと表示されればOK
cd\
cd c:\windows\windows32
netstat -an | find "2002"
test.pyを作成しPython.exeのフォルダーに置く *まだ未検証
import uno

localContext = uno.getComponentContext()
resolver = localContext.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", localContext )
ctx = resolver.resolve( "uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext" )

smgr = ctx.ServiceManager
desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx)
NewDoc = desktop.loadComponentFromURL( "private:factory/scalc","_blank", 0, () )

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-06-02 (月) 19:38:57 (1175d)