在 MS Excel 中,通过 VBA,可以像数据表一样使用 SQL 查询一系列单元格(使用 ActiveX 组件)。
假设数据存储在“Sheet1”中的“A1:C10”范围内。通过 VBA,我们可以使用连接、记录集和 SQL 从此范围中选择所需的数据,然后将结果放入同一文件的任何电子表格中(或其他任何地方)。
是否可以使用 Stabasic 宏在不使用 Base 的情况下对 OpenOffice/LibreOffice Calc 执行相同的操作?我想保留一个启用宏和 SQL 查询的简单 ODS 文件,而不使用任何 ODB 文件。有很多关于如何将电子表格引用为数据库并将其与 Base 一起使用的示例,但没有像我正在寻找的那样。
到目前为止,我不知道该怎么做,或者是否可能。
问候。
是的,可以,但是您必须首先将文件注册为 OO/LO 中的数据库。最好的方法是:
以下是查询 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 - 数据库访问
您具体要求的内容是不可能的。您可以尝试使用 Calc 通过巧妙地使用公式来完成必要的任务,例如模仿 SQL 查询。
但是,我发现如果做得正确,将 Calc 与 Base 结合起来会非常强大。您是否有理由不想使用 ODB 文件?将其视为管理数据库连接所需的文件,大多数情况下实际数据存储在其他地方。
LibreOffice 和 MS Office 设计之间存在一些差异,因为 LibreOffice 应用程序集成得更紧密,几乎就像将不同窗口集成到一个大型应用程序中一样。而 Excel 和 Access 是两个独立但相关的应用程序。因此,对于 Excel 来说,像 Calc 依赖 Base 那样依赖 Access 进行连接并没有多大意义。