Macros 如何通过事件驱动宏模拟LibreOffice基本表单中的用户输入

Macros 如何通过事件驱动宏模拟LibreOffice基本表单中的用户输入,macros,base,libreoffice,simulate,Macros,Base,Libreoffice,Simulate,我有一个LibreOffice基本表单,允许我手动向表中添加行。但是,每一行的第一个字段几乎总是前几行第一个字段-日期的副本。通过宏,我想自动填写日期字段,这样我就不必手动重复信息。 使用PriorToReset事件处理程序,我尝试了以下操作: Sub Main Dim defaultDate as string End Sub Sub PriorToReset(event) dim Form dim DateField Form=event.source Dat

我有一个LibreOffice基本表单,允许我手动向表中添加行。但是,每一行的第一个字段几乎总是前几行第一个字段-日期的副本。通过宏,我想自动填写日期字段,这样我就不必手动重复信息。 使用PriorToReset事件处理程序,我尝试了以下操作:

Sub Main

Dim defaultDate              as string
End Sub

Sub PriorToReset(event)
dim Form
dim DateField

Form=event.source
DateField = Form.getByName("Date")

if DateField.Text = "" then 
   defaultDate = Date
   DateField.Text = defaultDate
else
   defaultDate = DateField.Text
end if
End Sub
这确实会将当前日期放入一个空行中,但当我填写剩余字段并尝试保存该行时,它会表示日期字段为空而表示反对。我在该字段中查看今天的日期,但系统的行为好像是空的。如果我只在最后一个数字上退格,则替换它并按enter键,它将接受它

显然,仅仅将日期转储到“Text”属性中并没有设置输入数据的指示符。我还试验了: DateField.setPropertyValue(“文本”,默认日期) 但这完全是错误的。
如何通过宏模拟数据输入?

使用声明为UNO date结构的变量设置DATEFILD的date属性

首先,声明结构。然后设置结构的各个成员的值(年、月、日)。然后将date属性设置为等于struct和commit

调整此代码示例以适合:

Sub change_a_date

  Dim adate As New com.sun.star.util.Date
  root_form = ThisComponent.Drawpage.Forms
  main_frm = root_form.getByName("MainForm") 

  adate.year = 1990
  adate.month = 7
  adate.day = 4

  main_frm.getByName("date_bx").date = adate
  main_frm.getByName("date_bx").commit

End Sub
基于示例的声明。另见