将数据集从 openoffice base 传输到 calc
Transfer a data set from openoffice base to calc
在 openoffice-base 中通过自定义表单进行查询后,我想将一组选定的数据传输到模板 openoffice-calc table。我知道我可以通过按数据源 (F4) 按钮访问 openoffice-calc 中的数据集,但是我只能通过查询访问。最好的解决方案是在对表单进行数据库查询之后,需要一个按钮事件才能从模板中打开 openoffice-calc table 并从数据集中插入数据。
首先转到 Tools -> Macros -> Organize Macros -> LibreOffice Basic
并添加此代码。更改模板文件的路径。
Sub Copy_Record_To_Calc(oEvent)
Dim oForm
Dim templatePath As String
Dim oServiceManager As Object, oDesktop As Object
Dim oFileProperties As Object
Dim oDoc As Object, oSheet As Object, oCell As Object
Dim column As Integer
oForm = oEvent.Source.getModel().getParent()
If oForm.isAfterLast() Then
Print "Hey, you are after the last element."
Exit Sub
ElseIf oForm.isBeforeFirst() Then
Print "Hey, you are before the first element."
Exit Sub
End If
templatePath = "file:///C:/Users/JimStandard/Desktop/Untitled 2.ots"
Set oServiceManager = CreateObject("com.sun.star.ServiceManager")
Set oDesktop = oServiceManager.createInstance("com.sun.star.frame.Desktop")
Set oFileProperties(0) = new com.sun.star.beans.PropertyValue
oFileProperties(0).Name = "AsTemplate"
oFileProperties(0).Value = True
Set oDoc = oDesktop.loadComponentFromURL( _
templatePath, "_blank", 0, Array(oFileProperties))
oSheet = oDoc.Sheets(0)
For column = 1 to 2
oCell = oSheet.getCellByPosition(column - 1, 0)
oCell.String = oForm.getString(column)
Next column
End Sub
然后在窗体设计模式下,右键单击按钮并选择Control
。在“事件”选项卡中,单击 Execute action
旁边的三个点。单击 Macro...
并找到您添加的 Copy_Record_To_Calc 宏。
现在关闭设计模式。转到记录并单击按钮。它将打开 Calc 模板并将当前记录的前两列复制到电子表格的 A 列和 B 列中。
另请参阅:
- Andrew Pitonyak's Base Macros (PDF)
的第 4.2.1 节
- ResultSet documentation
- This thread 给出了使用 Calc 模板的示例。
在 openoffice-base 中通过自定义表单进行查询后,我想将一组选定的数据传输到模板 openoffice-calc table。我知道我可以通过按数据源 (F4) 按钮访问 openoffice-calc 中的数据集,但是我只能通过查询访问。最好的解决方案是在对表单进行数据库查询之后,需要一个按钮事件才能从模板中打开 openoffice-calc table 并从数据集中插入数据。
首先转到 Tools -> Macros -> Organize Macros -> LibreOffice Basic
并添加此代码。更改模板文件的路径。
Sub Copy_Record_To_Calc(oEvent)
Dim oForm
Dim templatePath As String
Dim oServiceManager As Object, oDesktop As Object
Dim oFileProperties As Object
Dim oDoc As Object, oSheet As Object, oCell As Object
Dim column As Integer
oForm = oEvent.Source.getModel().getParent()
If oForm.isAfterLast() Then
Print "Hey, you are after the last element."
Exit Sub
ElseIf oForm.isBeforeFirst() Then
Print "Hey, you are before the first element."
Exit Sub
End If
templatePath = "file:///C:/Users/JimStandard/Desktop/Untitled 2.ots"
Set oServiceManager = CreateObject("com.sun.star.ServiceManager")
Set oDesktop = oServiceManager.createInstance("com.sun.star.frame.Desktop")
Set oFileProperties(0) = new com.sun.star.beans.PropertyValue
oFileProperties(0).Name = "AsTemplate"
oFileProperties(0).Value = True
Set oDoc = oDesktop.loadComponentFromURL( _
templatePath, "_blank", 0, Array(oFileProperties))
oSheet = oDoc.Sheets(0)
For column = 1 to 2
oCell = oSheet.getCellByPosition(column - 1, 0)
oCell.String = oForm.getString(column)
Next column
End Sub
然后在窗体设计模式下,右键单击按钮并选择Control
。在“事件”选项卡中,单击 Execute action
旁边的三个点。单击 Macro...
并找到您添加的 Copy_Record_To_Calc 宏。
现在关闭设计模式。转到记录并单击按钮。它将打开 Calc 模板并将当前记录的前两列复制到电子表格的 A 列和 B 列中。
另请参阅:
- Andrew Pitonyak's Base Macros (PDF) 的第 4.2.1 节
- ResultSet documentation
- This thread 给出了使用 Calc 模板的示例。