在 WPS Office 的 JavaScript 宏(JS宏)开发环境中,你可以使用 OLEDB(Object Linking and Embedding Database)连接技术 来访问和操作外部数据库或数据源中的数据。这种连接方式允许你从诸如 Microsoft Access、SQL Server、Excel 文件或其他支持 OLEDB 的数据源中读取或写入数据,从而实现数据的动态获取与处理。
在 WPS 表格(类似于 Excel)中,通过 OLEDB 获取的外部数据,通常会被加载到工作表中,并且这类数据连接的管理是通过 QueryTables(查询表)对象 来实现的。
一、什么是QueryTables
QueryTables 是工作表中用于管理外部数据查询与连接的对象集合,它代表了一组通过特定数据连接(如 OLEDB、ODBC、Web 查询等)从外部源导入到工作表中的数据区域。每一个通过OLEDB 等方式导入的数据表,通常都会对应一个 QueryTable 对象,你可以通过该对象对数据进行刷新、更改连接、设置参数、控制更新行为等操作。
二、QueryTables对象上的属性
2.1、Application属性
这是一个耳熟能详的属性,官方注解如下所示:
- 如果不使用对象识别符,则该属性返回一个 Application对象,该对象表示 ET 应用程序。如果使用对象识别符,则该属性返回一个表示指定对象(可对一个 OLE 自动操作对象使用本属性来返回该对象的应用程序)创建者的 Application 对象。只读。
2.2、Count属性
望文生义,该属性的返回值就是QueryTables集合中元素的个数,也就是统计工作表中连接(QueryTable)的数量。
使用示例:
function getQueryTablesCount() {
let QueryTables = Worksheets.Item(1).QueryTables;
let n = QueryTables.Count;
console.log("工作表1上的连接数量有:" + n + "个");
}
执行效果:

2.3、Creator属性
它返回一个32位的整数,表示应用程序的IP地址。只读,不可更改。
示例代码:
function getQueryTablesCount() {
let QueryTables = Worksheets.Item(1).QueryTables;
let n = QueryTables.Count;
console.log("工作表1上的连接数量有:" + n + "个");
console.log("创建对象的应用程序是:" + QueryTables.Creator);
}
执行效果:

返回14亿多,实际上这是一个常量:xlCreatorCode

如果你是在word里面创建,这个数值就会不一样
2.4、Parent属性
返回指定的父类对象,只读。
示例代码:
function getQueryTablesCount() {
console.clear();
let QueryTables = Worksheets.Item(1).QueryTables;
let n = QueryTables.Count;
let parent = QueryTables.Parent; // 对应工作表对象
console.log("工作表1上的连接数量有:" + n + "个");
console.log("创建对象的应用程序是:" + QueryTables.Creator);
console.log("创建对象的应用程序是:" + xlCreatorCode);
console.log(parent.Name); // 工作表名称
}
执行效果:

三、QueryTables对象上的方法
3.1、新建一个连接查询表:add
QueryTables.Add(Connection, Destination, [sqlQuery])
Connection:是一个必须参数
|
查询表的数据源。可为以下情形之一: 一个包含 OLE DB 或 ODBC 连接字符串的字符串。ODBC 连接字符串的格式为“ODBC;<连接字符串>”。 一个 QueryTable 对象,该对象表示查询信息的初始复制源,包括连接字符串和 SQL 文本,但不包括 Destination 区域。指定 QueryTable 对象会导致 Sql 参数被忽略。 一个 ADO 或 DAO Recordset 对象。从 ADO 或 DAO 记录集中读取数据。ET 会保留该记录集,直到该查询表被删除或 SQL 连接发生更改。不能对产生的查询表进行编辑。 一个 Web 查询,“URL;”格式的字符串,其中“URL;”是必需的,但不进行本地化,字符串的其余部分作为 Web 查询的 URL。 数据查找程序。“FINDER;<数据查找程序文件路径>”格式的字符串,其中“FINDER;”是必需的,但不能本地化。字符串的其余部分为数据查找程序文件(*.dqy 或 *.iqy)的路径和名称。使用 Add 方法时将读取该文件;之后,对查询表的 Connection 属性的调用将相应地返回以“ODBC”或“URL”开头的字符串。 一个文本文件。“TEXT;<文本文件路径和名称>”格式的字符串,其中 TEXT 是必需的,但不能本地化。 |
Destination:(必须)查询表目标区域(生成的查询表的放置区域)左上角的单元格。目标区域必须位于 QueryTables 对象所在的工作表中。也就是 QueryTables.Parent 对象中。换句话说,你在sheet1中建立的连接,数据就只能加载到sheet1中,不能是sheet2
sqlQuery:可选,在 ODBC 数据源上运行的 SQL 查询字符串。当使用的数据源为 ODBC 数据源时,该参数可选(如果不在此处指定该参数,则应该在查询表刷新之前使用查询表的 Sql 属性进行设置)。当将 QueryTable 对象、文本文件、ADO 或 DAO Recordset 对象指定为数据源时,不能使用该参数。
示例代码:
function conntest_sht1() {
let connstr = "你的连接字符串";
let qyTb = Worksheets.Item(1).QueryTables.Add(
connstr,
Sheets(1).Range("A1"),
"select distinct sj 市级 from uf_scrl where tbsj='2025-11-01';"
);
qyTb.Refresh(true); // 加载数据,如果是create等类型语句不用加载,否则报错
}

错误示范:

加载到其他工作表会产生错误,但报错信息一言难尽..........
3.2、Item方法
它从集合中返回一个对象,示例如下:
function getQueryTablesCount() {
console.clear();
let QueryTables = Worksheets.Item(1).QueryTables;
let n = QueryTables.Count;
for (let i = 1; i <= n; i++) {
let qt = QueryTables.Item(i);
console.log("第" + i + "个连接的名称是:" + qt.Name);
}
}
执行效果如下:

1038

被折叠的 条评论
为什么被折叠?



