对 Power Automate 中运行的 Office 脚本进行故障排除

Power Automate 在独立 Excel 会话中代表你运行脚本。 这会导致某些行为更改,这些更改可能会导致某些脚本或方案出现问题。 Power Automate 平台脚本编写器还应了解一些限制和行为。 请务必阅读文章 使用 Office 脚本排查 Office 脚本平台限制和要求,因为大部分信息也适用于流中的脚本。

提示

如果刚开始将 Office 脚本与 Power Automate 配合使用,请从 使用 Power Automate 运行 Office 脚本 开始了解平台。

重要

若要在 Power Automate 中使用 Office 脚本,必须具有 Microsoft 365 的业务许可证。 Office 365 企业版 E1 和 Office 365 F3 许可证可以将脚本与 Power Automate 配合使用,但不能直接在 Excel 中使用 Power Automate 集成。

避免相对引用

Power Automate 代表你运行所选 Excel 工作簿中的脚本。 发生此情况时,工作簿可能会关闭。 依赖于用户当前状态的任何 API(例如 Workbook.getActiveWorksheet)在 Power Automate 中的行为可能有所不同。 这是因为 API 基于用户视图或游标的相对位置,并且 Power Automate 流中不存在该引用。

一些相对引用 API 在 Power Automate 中引发错误。 其他行为具有默认行为,表示用户的状态。 设计脚本时,请务必对工作表和区域使用绝对引用。 这会使 Power Automate 流保持一致,即使工作表已重新排列也是如此。

Power Automate 流中失败的脚本方法

从 Power Automate 流中的脚本调用时,以下方法会引发错误并失败。

方法
Chart activate
区域 select
Workbook getActiveCell
Workbook getActiveChart
Workbook getActiveSlicer
Workbook getSelectedRange
Workbook getSelectedRanges

Power Automate 流中具有默认行为的脚本方法

以下方法使用默认行为来代替任何用户的当前状态。

方法 Power Automate 行为
Workbook getActiveWorksheet 返回工作簿中的第一个工作表或当前由 方法激活的 Worksheet.activate 工作表。
Worksheet activate 出于 目的 Workbook.getActiveWorksheet,将工作表标记为活动工作表。

Power Automate 中不完全支持刷新

在 Power Automate 中运行时,Office 脚本无法刷新大多数数据。 在流中调用时,大多数刷新方法(如 PivotTable.refresh)不执行任何操作。 Workbook.refreshAllDataConnections 仅当 PowerBI 是源时才刷新。 此外,Power Automate 不会为使用工作簿链接的公式触发数据刷新。

在 Power Automate 流中不执行任何操作的脚本方法

通过 Power Automate 调用时,以下方法在脚本中不执行任何操作。 它们仍然成功返回,并且不会引发任何错误。

方法
PivotTable refresh
Workbook refreshAllPivotTables
Worksheet refreshAllPivotTables

Power Automate 中具有不同行为的脚本方法

以下方法在 Power Automate 流中的工作方式与通过 Excel 运行时不同。

方法 Power Automate 行为
Workbook refreshAllDataConnections 仅刷新 PowerBI 源。 对于其他源,该方法返回成功,但未执行任何操作。

使用文件浏览器控件选择工作簿

生成 Power Automate 流的 “运行脚本 ”步骤时,需要选择哪个工作簿是流的一部分。 使用文件浏览器选择工作簿,而不是手动键入工作簿的名称。

显示“显示选取器文件浏览器”选项的 Power Automate 运行脚本操作。

有关 Power Automate 限制的更多上下文以及有关动态选择工作簿的潜在解决方法的讨论,请参阅 Power Automate 社区Microsoft中的此主题

将整个数组作为脚本参数传递

Power Automate 允许用户将数组作为变量或数组中的单个元素传递到连接器。 默认值为传递单个元素,这将在流中生成数组。 对于将整个数组作为参数的脚本或其他连接器,需要选择“ 切换以输入整个数组 ”按钮,以将数组作为一个完整对象传递。 此按钮位于每个数组参数输入字段的右上角。

用于在控件字段输入框中输入整个数组的按钮。

时区差异

Excel 文件没有固有的位置或时区。 每次用户打开工作簿时,其会话都会使用该用户的本地时区进行日期计算。 Power Automate 始终使用 UTC。

如果脚本使用日期或时间,则在本地测试脚本时与通过 Power Automate 运行脚本时可能存在行为差异。 Power Automate 允许转换、格式化和调整时间。 有关如何在 Power Automate 中使用这些函数以及如何在 Power Automate 中向和从 Power Automate 脚本传递数据的说明,请参阅在流中使用日期和时间,了解如何为脚本提供该时间信息。

Power Automate 中未显示脚本参数字段或返回的输出

有两个原因导致脚本的参数或返回的数据未准确反映在 Power Automate 流生成器中。

创建脚本时,脚本的签名与 Excel Business (Online) 连接器一起存储。 删除旧连接器并创建一个新连接器,以获取 运行脚本 操作的最新参数和返回值。

某些 Web API 不适用于 Power Automate 流

在 Power Automate 流中运行 Office 脚本时,某些 Web API(如 TextEncoderCrypto)可能不可用。 有关 Web API 的完整列表,请参阅 MDN Web API。

运行使用不受支持的 API 的脚本时,Power Automate 返回错误 *API* is not defined,其中 *API* 指定一个库,例如 TextEncoder

另请参阅