def wrapper(): # LibreOfficeをバックグラウンドで起動してコンポーネントテクストとサービスマネジャーを取得する。 ctx = None try: ctx = officehelper.bootstrap() # コンポーネントコンテクストの取得。 except: pass if not ctx: print("Could not establish a connection with a running office.") sys.exit() print("Connected to a running office ...") smgr = ctx.getServiceManager() # サービスマネジャーの取得。 if not smgr: print( "ERROR: no service manager" ) sys.exit() print("Using remote servicemanager\n") try: func(ctx, smgr) # 引数の関数の実行。 except: traceback.print_exc() # soffice.binの終了処理。これをしないとLibreOfficeを起動できなくなる。 desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop", ctx) prop = PropertyValue(Name="Hidden",Value=True) desktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, (prop,)) # バックグラウンドでWriterのドキュメントを開く。 terminated = desktop.terminate() # LibreOfficeをデスクトップに展開していない時はエラーになる。 if terminated: print("\nThe Office has been terminated.") # 未保存のドキュメントがないとき。 else: print("\nThe Office is still running. Someone else prevents termination.") # 未保存のドキュメントがあってキャンセルボタンが押された時。
def connect(): # LibreOfficeをバックグラウンドで起動してコンポネントテクストを取得する。 ctx = None try: ctx = officehelper.bootstrap() if ctx: print("Connected to a running office ...") return ctx except: pass return None
def wrapper(): # LibreOfficeをバックグラウンドで起動してコンポーネントテクストとサービスマネジャーを取得する。 try: ctx = officehelper.bootstrap() # コンポーネントコンテクストの取得。 except: print("Could not establish a connection with a running office.", file=sys.stderr) sys.exit() print("Connected to a running office ...") smgr = ctx.getServiceManager() # サービスマネジャーの取得。 print("Using {} {}".format(*_getLOVersion(ctx, smgr))) # LibreOfficeのバージョンを出力。 return func(ctx, smgr) # 引数の関数の実行。