在 Calc 电子表格上执行 SQL 查询而不使用 Base

问题描述 投票:0回答:2

在 MS Excel 中,通过 VBA,可以像数据表一样使用 SQL 查询一系列单元格(使用 ActiveX 组件)。

假设数据存储在“Sheet1”中的“A1:C10”范围内。通过 VBA,我们可以使用连接、记录集和 SQL 从此范围中选择所需的数据,然后将结果放入同一文件的任何电子表格中(或其他任何地方)。

是否可以使用 Stabasic 宏在不使用 Base 的情况下对 OpenOffice/LibreOffice Calc 执行相同的操作?我想保留一个启用宏和 SQL 查询的简单 ODS 文件,而不使用任何 ODB 文件。有很多关于如何将电子表格引用为数据库并将其与 Base 一起使用的示例,但没有像我正在寻找的那样。

到目前为止,我不知道该怎么做,或者是否可能。

问候。

libreoffice-calc openoffice-calc
2个回答
0
投票

是的,可以,但是您必须首先将文件注册为 OO/LO 中的数据库。最好的方法是:

  1. 打开一个Writer文档(新的就可以了)
  2. 工具-->邮件合并向导
  3. 在步骤 1 中,单击“交换数据库...”按钮。
  4. 在 Exchange 数据库对话框中,单击“浏览”
  5. 找到包含所需数据的 Calc (ODS) 文件,然后单击“打开”按钮。
  6. 现在您应该在对话框的“可用数据库”部分中看到文件的名称。单击名称旁边的“+”号,然后选择要使用的工作表,然后单击“定义”。这将最终将文件添加到可用数据库中。
  7. 关闭 Exchange 数据库对话框。
  8. 单击邮件合并向导上的“取消”。
  9. 关闭Writer文档(甚至不需要保存)。

以下是查询 Sheet1 前 2 列的示例基本代码。您确实需要将“CalcFile”替换为您的 Calc 文件的注册名称。

Sub QueryData
    Dim DatabaseContext As Object
    Dim DataSource As Object
    Dim Conn As Object
    Dim InteractionHandler as Object
     
    DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")

    DataSource = DatabaseContext.getByName("CalcFile")
     
    If Not DataSource.IsPasswordRequired Then
      Conn = DataSource.GetConnection("","")
    Else
      InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
      Conn = DataSource.ConnectWithCompletion(InteractionHandler)
    End If
    Stmt=Conn.createStatement()
    REM create an SQL command
    strSQL="SELECT * FROM SHEET1"
    REM finally, execute and store results in ResultSet Object
    Result=Stmt.executeQuery(strSQL)
    While Result.next()
        REM for now, let us just use the getString() method to get the
        REM columns. Note that they are being accessed by index
        MsgBox (Result.getString(1) & " " & Result.getString(1))
    Wend
    Conn.close()
End Sub

该代码基于 PDF:Roberto C. Benitez 的“Database Development - OpenOffice.org & OOBasic”,但我现在找不到它的链接。

类似信息位于: 打开 Office Wiki - 数据库访问


0
投票

您具体要求的内容是不可能的。您可以尝试使用 Calc 通过巧妙地使用公式来完成必要的任务,例如模仿 SQL 查询

但是,我发现如果做得正确,将 Calc 与 Base 结合起来会非常强大。您是否有理由不想使用 ODB 文件?将其视为管理数据库连接所需的文件,大多数情况下实际数据存储在其他地方。

LibreOffice 和 MS Office 设计之间存在一些差异,因为 LibreOffice 应用程序集成得更紧密,几乎就像将不同窗口集成到一个大型应用程序中一样。而 Excel 和 Access 是两个独立但相关的应用程序。因此,对于 Excel 来说,像 Calc 依赖 Base 那样依赖 Access 进行连接并没有多大意义。

© www.soinside.com 2019 - 2024. All rights reserved.