虽然 Excel 操作可以处理大多数 Excel 自动化场景,但 SQL 查询可以更高效地检索和操作大量 Excel 数据。
假设流仅需要修改包含特定值的 Excel 注册表。 若要在没有 SQL 查询的情况下实现此功能,您需要循环、条件和多个 Excel 操作。
或者,您可以通过 SQL 查询实现此功能,仅需使用两个操作:打开 SQL 连接操作和执行 SQL 语句操作。
打开与 Excel 文件的 SQL 连接
在运行 SQL 查询之前,必须打开与要访问的 Excel 文件的连接。
若要建立连接,请创建一个名为 %Excel_File_Path% 的新变量,然后使用 Excel 文件路径初始化它。 或者,可以跳过此步骤并使用流中后面的文件的硬编码路径。
现在,部署打开 SQL 连接操作并在其属性中填充以下连接字符串。
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%Excel_File_Path%;Extended Properties="Excel 12.0 Xml;HDR=YES";
备注
若要成功使用展示的连接字符串,您必须下载和安装 Microsoft Access 数据库引擎 2010 可再发行版。
打开与受密码保护的 Excel 文件的 SQL 连接
当对受密码保护的 Excel 文件运行 SQL 查询时,需要不同的方法。 打开 SQL 连接操作无法连接到受密码保护的 Excel 文件,因此您必须删除该保护。
为了实现此目的,请使用启动 Excel 操作启动 Excel 文件。 该文件受密码保护,因此在密码字段中输入相应的密码。
接下来,部署适当的 UI 自动化操作并导航到文件>信息>保护工作薄>使用密码加密。 您可以在自动化桌面应用程序中找到有关 UI 自动化以及如何使用相应操作的详细信息。
在选择使用密码加密后,使用填充窗口中的文本字段操作在弹出对话框中填充空字符串。 若要填充空字符串,请使用以下表达式:%""%。
若要在对话框中按确定按钮并应用更改,请部署按窗口中的按钮操作。
最后,部署关闭 Excel 操作以将不受保护的工作薄另存为新 Excel 文件。
保存文件后,按照打开与 Excel 文件的 SQL 连接中的说明打开与该文件的连接。
完成对 Excel 文件的操作后,使用删除文件操作删除 Excel 文件的不受保护的副本。
读取 Excel 电子表格的内容
虽然从 Excel 工作表中读取操作可以读取 Excel 工作表的内容,但循环可能需要很长时间来迭代访问检索的数据。
从电子表格检索特定值的更有效方法是将 Excel 文件视为数据库,并针对它们执行 SQL 查询。 此方法速度更快,并提高了流的性能。
若要检索电子表格的所有内容,您可以在执行 SQL 语句操作中使用以下 SQL 查询。
SELECT * FROM [SHEET$]
备注
若要在您的流中应用此 SQL 查询,请将 SHEET 占位符替换为要访问的电子表格的名称。
若要检索特定列中包含特定值的行,请使用以下 SQL 查询:
SELECT * FROM [SHEET$] WHERE [COLUMN NAME] = 'VALUE'
备注
若要在您的流中应用此 SQL 查询,请进行以下替换:
- 将 SHEET 替换为要访问的电子表格的名称。
- 将 COLUMN NAME 替换为包含要查找的值的列。 Excel 工作表第一行中的列被标识为表的列名称。
- 将 VALUE 替换为要查找的值。
从 Excel 行中删除数据
虽然 Excel 不支持 DELETE SQL 查询,但您可以使用 UPDATE 查询将特定行的所有单元格设置为 null。
更精确地,您可以使用以下 SQL 查询:
UPDATE [SHEET$] SET [COLUMN1]=NULL, [COLUMN2]=NULL WHERE [COLUMN1]='VALUE'
在开发您的流时,必须将 SHEET 占位符替换为要访问的电子表格的名称。
COLUMN1 和 COLUMN2 占位符表示要处理的列的名称。 此示例具有两列,但在实际场景中,列数可能有所不同。 Excel 工作表第一行中的列被标识为表的列名称。
查询的 [COLUMN1]='VALUE' 部分定义要更新的行。 在您的流中,基于唯一描述行的组合使用列名称和值。
检索 Excel 数据(特定行除外)
在某些情况下,您可能需要检索 Excel 电子表格的所有内容(特定行除外)。
实现此结果的便捷方式是将不需要的行的值设置为 null,然后检索所有值(null 值除外)。
若要更改电子表格中特定行的值,您可以使用 UPDATE SQL 查询,如从 Excel 行中删除数据中所示:
UPDATE [SHEET$] SET [COLUMN1]=NULL, [COLUMN2]=NULL WHERE [COLUMN1]='VALUE'
接下来,运行以下 SQL 查询来检索电子表格中不包含 null 值的所有行:
SELECT * FROM [SHEET$] WHERE [COLUMN1] IS NOT NULL OR [COLUMN2] IS NOT NULL
COLUMN1 和 COLUMN2 占位符表示要处理的列的名称。 此示例具有两列,但在实际表中,列数可能有所不同。 Excel 工作表第一行中的所有列被标识为表的列名称。