我有一个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 参考。