如何通过事件驱动的宏在 LibreOffice 基本窗体中模拟用户输入



我有一个LibreOffice Base表单,允许我手动向表中添加行。但是,每行的第一个字段几乎总是前几行第一个字段 - Date 的副本。通过宏,我想自动填写日期字段,这样我就不必手动重复信息。使用 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

这确实将当前日期放入空行中,但是当我填写其余字段并尝试保存该行时,它通过说日期字段为空来反对。我正在该字段中查看今天的日期,但系统就像它是空的一样。如果我只在最后一个数字上退格,请替换它并按回车键接受它。

显然,仅将日期转储到"文本"属性中并不能设置已输入数据的指示器。我还尝试了: DateField.setPropertyValue("Text", defaultDate)但这完全错误了。如何通过宏模拟数据输入?

使用声明为 UNO 日期结构的变量设置 DateField 的日期属性。

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

调整此代码示例以适应:

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

基于 IsStruct 函数示例的声明。 另请参阅 UNO 日期结构的 API 参考。

相关内容

  • 没有找到相关文章

最新更新