前の関連記事:Calc(59)追加できるリスナー一覧: その10 実行結果の整理
セルの内容をクリップボードにコピーするマクロ
import unohelper from com.sun.star.datatransfer import XTransferable from com.sun.star.datatransfer import DataFlavor # Struct from com.sun.star.datatransfer import UnsupportedFlavorException # 例外 def macro(documentevent=None): # 引数は文書のイベント駆動用。 doc = XSCRIPTCONTEXT.getDocument() if documentevent is None else documentevent.Source # ドキュメントのモデルを取得。 ctx = XSCRIPTCONTEXT.getComponentContext() # コンポーネントコンテクストの取得。 smgr = ctx.getServiceManager() # サービスマネージャーの取得。 selection = doc.getCurrentSelection() # 選択範囲を取得。 systemclipboard = smgr.createInstanceWithContext("com.sun.star.datatransfer.clipboard.SystemClipboard", ctx) # SystemClipboard systemclipboard.setContents(TextTransferable(selection[0, 0].getString()), None) # クリップボードにコピーする。 class TextTransferable(unohelper.Base, XTransferable): def __init__(self, txt): # クリップボードに渡す文字列を受け取る。 self.txt = txt self.unicode_content_type = "text/plain;charset=utf-16" def getTransferData(self, flavor): if flavor.MimeType.lower()!=self.unicode_content_type: raise UnsupportedFlavorException() return self.txt def getTransferDataFlavors(self): return DataFlavor(MimeType=self.unicode_content_type, HumanPresentableName="Unicode Text"), # DataTypeの設定方法は不明。 def isDataFlavorSupported(self, flavor): return flavor.MimeType.lower()==self.unicode_content_type g_exportedScripts = macro, #マクロセレクターに限定表示させる関数をタプルで指定。LibreOffice5(122)Javaの例: ClipboardをPythonにするのマクロと違って、他のソフトにクリップボードのオーナーが変化したことを感知しないのでXClipboardのsetContents()メソッドの引数のClipboardOwnerはNoneを渡しています(11行目)。
CopyToClipboard.ods
このマクロを埋め込んだCalcドキュメントです。
マクロセレクターで埋め込みマクロのsimplecopyのmacroを実行すると選択しているセルの内容をクリップボードにコピーします。
複数セルを選択しているときは左上端のセルの内容をコピーします。
クリップボードにはtext/plain;charset=utf-16にコピーしていますが、数値をこのマクロでペーストしてCalcのシートにペーストすると数値として認識されました。
0 件のコメント:
コメントを投稿