Calc(60)セルの内容をクリップボードにコピーするマクロ

2018-01-21

旧ブログ

t f B! P L
選択セルの内容を文字列としてクリップボードにコピーするマクロの例です。ディスパッチコマンドでコピーすればGUIと同様になると思いますが、今回はそれと違ってコピーされたせるの表示は変化しません。

前の関連記事: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のシートにペーストすると数値として認識されました。

次の関連記事:Calc(61)文字種を変換するマクロ

ブログ検索 by Blogger

Translate

最近のコメント

Created by Calendar Gadget

QooQ