Pythonでマクロ(7):誕生日の入力を日付フィールドを使って

ダイアログのコントロール(部品)に日付フィールドというものがある。形式に従って日付けを入力すると年、月、日に自動的に分解しくれる。

作例では誕生日を入力して<Enter>キーを入力すると入力の終わりを意味し結果はCalcのシートに表示される。

【ダイアログ上の日付フィールド】

作例の入力フォーム

【マクロ】


#coding: utf-8
import uno
import screen_io as ui
import unohelper
from com.sun.star.awt import XKeyListener

class MyKeyListener(unohelper.Base, XKeyListener):
  def __init__(self, sheet, datef1):
    self.sheet = sheet
    self.datef1 = datef1
    self.row = 0
  def keyPressed( self,  event ):
    k = event.KeyCode
    c = event.KeyChar.value 
    mods = event.Modifiers
    # mods are additive
    # 0 - None
    # 1 - Shift
    # 2 - Ctrl
    # 4 - Alt
    # 8 - Super_R
    print(k, c, mods)
    if k == 1280:  #Enterキー
      #print(self.datef1.IsDate)
      year = self.datef1.Date.Year
      month = self.datef1.Date.Month
      day = self.datef1.Date.Day
      #表への書き出し
      self.row+=1
      print(self.row)
      print(year, month, day)
      self.sheet.getCellByPosition(0,self.row).Value=year
      self.sheet.getCellByPosition(1,self.row).Value=month
      self.sheet.getCellByPosition(2,self.row).Value=day

def createDialog():
  ctx = XSCRIPTCONTEXT.getComponentContext()
  smgr = ctx.getServiceManager()
  dp = smgr.createInstanceWithContext("com.sun.star.awt.DialogProvider", ctx)
  dialog = dp.createDialog("vnd.sun.star.script:Standard.Dialog3?location=application")
#表
  doc = XSCRIPTCONTEXT.getDocument()
  sheet = doc.Sheets[0]
#コントロールの登録
  datef1 =  dialog.getControl("DateField1")
#エヴェント監視(Enterキーを検出)
  datef1_listener = MyKeyListener(sheet, datef1)
  datef1.addKeyListener(datef1_listener)
  dialog.execute()
  dialog.dispose()

<\div>

  • <Enter>キーの入力はイヴェントとして発生する。このイヴェントは keyPressedメッソドで処理される。このメソッドは親クラスXKeyListenerで定義されているのでクラスMyKeyListenerではそれを継承し再定義している。
  • このキー・イヴェントは全てのキー入力で起こる。eventの属性Kcodeの値を調べ<Enter>キーを取り出す。
  • 日付フィールドの属性、Date.Year、Date.Month、Date.Dayから入力した年、、月、日が得られる。
  • このマクロではダイアログとCalcのシートを同時に使っている。

One Reply to “Pythonでマクロ(7):誕生日の入力を日付フィールドを使って”

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です