用 Power Automate 对 Excel 文件运行 SQL 查询

用 Power Automate 对 Excel 文件运行 SQL 查询

Excel 操作可以处理大多数 Excel 自动化场景,而 SQL 查询能更高效地检索和处理大量 Excel 数据。

假设一个流程只需修改包含某个特定值的 Excel 记录。如果不用 SQL 查询,就需要循环、条件判断和多个 Excel 操作。另一种办法是使用 SQL 查询,仅通过打开 SQL 连接(Open SQL connection)和执行 SQL 语句(Execute SQL statements)两个操作实现这一功能。

打开与 Excel 文件的 SQL 连接

运行 SQL 查询之前,必须先连接到要访问的 Excel 文件。

创建一个名为 %Excel_File_Path% 的变量,用 Excel 文件路径初始化它。也可以省略这一步,在后续流程中直接填写固定文件路径。

在“设置变量”操作中填写 Excel 文件路径。
在“设置变量”操作中填写 Excel 文件路径。

添加“打开 SQL 连接”操作,在属性中填写以下连接字符串:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%Excel_File_Path%;Extended Properties="Excel 12.0 Xml;HDR=YES";
“打开 SQL 连接”操作。
“打开 SQL 连接”操作。

打开与密码保护的 Excel 文件的 SQL 连接

对密码保护的 Excel 文件运行 SQL 查询时,需要采用不同方法。“打开 SQL 连接”无法连接这类文件,因此必须先解除保护。

使用“启动 Excel(Launch Excel)”操作打开工作簿,并在“密码”字段中填写该文件的密码。

“启动 Excel”操作及密码字段。
“启动 Excel”操作及密码字段。

接着添加相应的 UI 自动化操作,依次进入文件 → 信息 → 保护工作簿 → 用密码进行加密。有关 UI 自动化及相关操作的说明,见自动化桌面应用程序。

选择“用密码进行加密”的 UI 自动化操作。
选择“用密码进行加密”的 UI 自动化操作。

选择“用密码进行加密”后,使用“填充窗口中的文本字段(Populate text field in window)”操作,在弹出的对话框中填写空字符串。空字符串表达式为 %""%。

在窗口文本字段中填写空字符串。
在窗口文本字段中填写空字符串。

使用“按下窗口中的按钮(Press button in window)”操作点击“确定”,应用更改。

按下窗口中的“确定”按钮。
按下窗口中的“确定”按钮。

最后,添加“关闭 Excel(Close Excel)”操作,将解除保护的工作簿另存为一个新的 Excel 文件。

关闭 Excel 并将文档另存为新文件。
关闭 Excel 并将文档另存为新文件。

保存后,按照打开与 Excel 文件的 SQL 连接中的步骤连接新文件。完成对 Excel 文件的处理后,使用“删除文件(Delete file(s))”操作删除这个未受保护的副本。

删除未受保护的 Excel 副本。
删除未受保护的 Excel 副本。

读取 Excel 工作表的内容

“从 Excel 工作表读取”操作能够读取工作表内容,但若用循环遍历取回的数据,可能耗费较长时间。

从工作表中获取特定值时,更高效的方法是把 Excel 文件视为数据库,并对它执行 SQL 查询。原文指出,这种方法速度更快,能改善流程性能。

要获取工作表全部内容,在“执行 SQL 语句”操作中使用:

SELECT * FROM [SHEET$]
在“执行 SQL 语句”操作中填写 SELECT 查询。
在“执行 SQL 语句”操作中填写 SELECT 查询。

要获取指定列包含特定值的行,使用:

SELECT * FROM [SHEET$] WHERE [COLUMN NAME] = 'VALUE'

在流程中应用此查询时,请替换以下占位符:

  • SHEET:要访问的工作表名称。
  • COLUMN NAME:包含待查值的列名。Excel 工作表第一行中的字段被识别为表的列名。
  • VALUE:要查找的值。

删除 Excel 行中的数据

Excel 不支持 SQL 的 DELETE 查询,但可以使用 UPDATE 将特定行的所有单元格设为 null。具体查询如下:

UPDATE [SHEET$] SET [COLUMN1]=NULL, [COLUMN2]=NULL WHERE [COLUMN1]='VALUE'
使用 UPDATE 查询清空符合条件的单元格。
使用 UPDATE 查询清空符合条件的单元格。

编写流程时,将 SHEET 替换为要访问的工作表名称。

COLUMN1、COLUMN2 表示要处理的列名。示例只列出了两列,实际场景的列数可能不同。工作表第一行中的字段被识别为表的列名。

查询中的 [COLUMN1]='VALUE' 用于定义要更新的行。在流程中,选择能够唯一确定目标行的列名和值组合。

检索除特定行以外的 Excel 数据

有时需要获取工作表中除特定行以外的全部内容。一种方便的做法是将不需要的行中的值设为 null,然后检索非 null 的值。

先按删除 Excel 行中的数据一节的方法,执行 UPDATE 查询,修改指定行中的值:

UPDATE [SHEET$] SET [COLUMN1]=NULL, [COLUMN2]=NULL WHERE [COLUMN1]='VALUE'
将待排除行中的指定列设为 NULL。
将待排除行中的指定列设为 NULL。

再执行以下查询,获取这些列中至少有一列不是 null 的行:

SELECT * FROM [SHEET$] WHERE [COLUMN1] IS NOT NULL OR [COLUMN2] IS NOT NULL

COLUMN1、COLUMN2 表示要处理的列名。本例是两列,实际表可能有不同的列数。工作表第一行中的字段均被识别为表的列名。

来源:Microsoft Learn:对 Excel 文件运行 SQL 查询,Microsoft 文档团队及贡献者。英文源码作者元数据为 mattp123,贡献者包括 Yiannismavridis、NikosMoutzourakis、PetrosFeleskouras。正文和图片按官方文档仓库的CC BY 4.0许可保留署名;本版整理简体中文措辞,并依据英文原文纠正连接字符串和空字符串表达式。SQL 代码保持原样,末节对 OR 条件的解释已校正为“至少一列非空”。步骤与查询未在本次制作中执行。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容