LibreOfficeDev 25.8 Help
The Datasheet service allows to visualize the contents of database tables as well as the results of queries and SQL statements using Base's Data View. Additionally, this service allows to:
Add custom menus to the data view.
Access values in specific positions of the data view.
Position the cursor in a specific cell of the data view.
Before using the Datasheet service the ScriptForge library needs to be loaded or imported:
The Datasheet service can be invoked in two different ways depending on whether the database file is open.
The example below considers that the database file is open, hence the UI service can be used to retrieve the document and the OpenTable method from the Database service is used to get a Datasheet service instance.
    Dim ui As Object, oBase As Object, oSheet As Object
    Set ui = CreateScriptService("UI")
    ' Object oBase is an instance of the Base service
    Set oBase = ui.GetDocument("C:\Documents\myDB.odb")
    ' Object oSheet is an instance of the Datasheet service
    Set oSheet = oBase.OpenTable("Customers")
  In the example above it is also possible to use the method OpenQuery from the Base service to get a Datasheet instance.
To invoke the Datasheet service when the database file is not open, use the OpenTable, OpenQuery or OpenSql methods from the Database service. The example below uses the OpenTable method to open an existing table in the database file:
    Dim oDatabase As Object, oSheet As Object
    ' Object oDatabase is an instance of the Database service
    Set oDatabase = CreateScriptService("Database", "C:\Documents\myDB.odb")
    ' Object oSheet is an instance of the Datasheet service
    Set oSheet = oDatabase.OpenTable("Customers")
  The examples above can be translated to Python as follows:
    from scriptforge import CreateScriptService
    ui = CreateScriptService("UI")
    base_doc = ui.GetDocument(r"C:\Documents\MyFile.odb")
    sheet = base_doc.OpenTable("Customers")
  
    database = CreateScriptService("Database", r"C:\Documents\myDB.odb")
    sheet = database.OpenTable("Customers")
  The following properties are available in the Datasheet service:
| Name | Read-only | Type | Description | 
|---|---|---|---|
| ColumnHeaders | Yes | Array of Strings | Returns an Array with the names of column headers in the datasheet. | 
| CurrentColumn | Yes | String | Returns the currently selected column name. | 
| CurrentRow | Yes | Integer | Returns the number of the currently selected row, starting at 1. | 
| DatabaseFileName | Yes | String | Returns the file name of the Base file in FSO.FileNaming format. | 
| Filter | No | String | Specifies a filter to be applied to the datasheet expressed as the WHERE clause of a SQL query without the WHERE keyword. If an empty string is specified then the active Filter is removed. | 
| LastRow | Yes | Integer | Returns the number of rows in the datasheet. | 
| OrderBy | No | String | Specifies the order in which records are shown expressed as the ORDER BY clause of a SQL query without the ORDER BY keyword. If an empty string is specified then the active OrderBy is removed. | 
| ParentDatabase | Yes | Object | Returns the Database service instance to which the datasheet belongs. | 
| Source | Yes | String | Returns a String that represents the data source, which can be a SQL statement, a table name or a query name. | 
| SourceType | Yes | String | Returns the type of the data source, which can be one of the following values: "SQL", "TABLE" or "QUERY". | 
| XComponent | Yes | UNO Object | Returns the com.sun.star.lang.XComponent UNO object that represents the datasheet. | 
| XControlModel | Yes | UNO Object | Returns the com.sun.star.awt.XControl UNO object that represents the datasheet. | 
| XTabControllerModel | Yes | UNO Object | Returns the com.sun.star.awt.XTabControllerModel UNO object that represents the datasheet. | 
| List of Methods in the Datasheet Service | ||
|---|---|---|
Brings to front the data view window referred to by the Datasheet instance.
svc.Activate()
      oSheet.Activate()
    
      sheet.Activate()
    Closes the data view window referred to by the Datasheet instance.
svc.CloseDatasheet()
      oSheet.CloseDatasheet()
    
      sheet.CloseDatasheet()
    Creates a new menu entry in the data view window and returns a SFWidgets.Menu service instance, with which menu items can be programmatically added.
Menus added using the CreateMenu method are lost as soon as the data view window is closed.
svc.CreateMenu(menuheader: str, opt before: any, opt submenuchar: str): obj
menuheader: The name of the new menu.
before: This argument can be either the name of an existing menu entry before which the new menu will be placed or a number expressing the position of the new menu. If this argument is left blank the new menu is placed as the last entry.
submenuchar: The delimiter used in menu trees (Default = ">")
      Dim oMenu As Object
      Set oMenu = oSheet.CreateMenu("My Menu", Before := "Data")
      With oMenu
          .AddItem("Item 1", Command := ".uno:About")
          ' ...
          .Dispose()
      End With
    
      menu = sheet.CreateMenu("My Menu", before="Data")
      menu.AddItem("Item 1", command=".uno:About")
      # ...
      menu.Dispose()
    Read the Menu service help page to learn more about how to create menu and submenu entries and associate commands.
Returns the text in a given column of the current row.
This method does not change the position of the cursor in the data view window.
svc.GetText(column: any): str
column: The name of the column as a String or the column position (starting at 1). If a position greater than the number of columns is given, the last column is returned.
      oSheet.GetText("FirstName")
    
      sheet.GetText("FirstName")
    Returns the value in a given column of the current row as a valid Basic type.
The types that can be returned are: String, Integer, Long, Single, Double, Date and Null.
Binary types are returned as a Long value indicating the length of the binary field.
An Empty value is returned if the required value could not be retrieved.
This method does not change the position of the cursor in the data view window.
svc.GetValue(column: any): any
column: The name of the column as a String or the column position (starting at 1). If a position greater than the number of columns is given, the last column is returned.
      oSheet.GetValue("Address")
    
      sheet.GetValue("Address")
    Moves the cursor to the specified row and column.
svc.GoToCell(opt row: int, opt column: any): bool
row: The row number as a numeric value starting at 1. If the requested row exceeds the number of existing rows, the cursor is moved to the last row. If this argument is not specified, then the row is not changed.
column: The name of the column as a String or the column position (starting at 1). If the requested column exceeds the number of existing columns, the cursor is moved to the last column. If this argument is not specified, then the column is not changed.
      ' Moves the cursor to the column "LastName" in row 4
      oSheet.GoToCell(4, "LastName")
      ' Moves the cursor to the third column of the current row
      oSheet.GoToCell(Column := 3)
      ' Moves cursor one row down leaving it in the same column
      oSheet.GoToCell(Row := oSheet.CurrentRow + 1)
      ' Moves to the last column of the last row
      Dim LastColumn As Integer : LastColumn = UBound(oSheet.ColumnHeaders) + 1
      oSheet.GoToCell(oSheet.LastRow, LastColumn)
    
      sheet.GoToCell(4, "LastName")
      sheet.GoToCell(column=3)
      sheet.GoToCell(row=sheet.CurrentRow + 1)
      sheet.GoToCell(sheet.LastRow, len(sheet.ColumnHeaders))
    Removes a menu entry from the data view by its name.
This method can remove menus that belong to the standard user interface as well as menus that were programmatically added with the CreateMenu method. The removal of standard menus is not permanent and they will reappear after the window is closed and reopened.
svc.RemoveMenu(menuheader: str): bool
menuheader: The case-sensitive name of the menu to be removed. The name must not include the tilde ("~") character.
      oSheet.RemoveMenu("Data")
    
      sheet.RemoveMenu("Data")