JS宏连接数据库:工作表上的连接

在 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);
	}
}

执行效果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jackispy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值