Excel 端口
Version 26.2.9636
Version 26.2.9636
Excel 端口
Excel 端口使用脚本模板来双向转换 XML 文件和 Excel 工作表。任一方向的转换都可快速完成。
核心功能
- 在表格(Table)和模板(Template)模式下提供 Excel/XML 的双向转换
- 使用 ArcScript 实现动态数据填充的高级模板系统
- 支持多个工作表,并可配置行/列范围
概述
Excel 端口可以被配置为两种模式: 表模式 and 模版模式。他们各如下所示。
表模式
Excel 端口模式就是表模式。这种模式只支持将文件从 .xlsx 转为 .xml。如果需要将 .xml 转为 .xlsx 请使用模版模式。
在表模式中,端口将会将输入的 .xlsx 当作一个 .csv 文件。它输出的 .xml 文件如下面所示,原文中的每一行将会成为一个 Items 节点。
<Items>
<Record>
<field_0></field_0>
<field_1></field_1>
<field_2></field_2>
</Record>
</Items>
模版模式
在 模版模式 中,端口使用模版来进行转换。模版文件可以是下面的格式:
- 当转化 XML 为 Excel,模版文件是一个 Excel 文件。
- 当转化 Excel 为 XML,模版文件是一个 XML 文件。
这些模版文件使用 ArcScript 来动态的使用输入文件生成输出文件。更多的内容,请参考 模版。
端口配置
本部分包括所有可配置的端口属性。
设置
配置
与端口关键配置有关的设置。
- 端口 Id 端口的静态、唯一标识符。
- 端口类型 显示端口类型及其用途的描述。
- 端口描述 一个可选字段,用于提供端口及其在流中的角色的自由格式描述。
- 转换模式 用来指定转换输入文件到输出文件的模式(表模式 或 模版模式)。其他信息请参考 概述。
- 有标题 (表模式)当选择后,
.xlsx中的第一行将会被用来命名生成的节点。如果不选,这些名字会用自动生成名字,如 field_0, field_1,等。 - 模板文件 作用为输出模板文件。根据模板中的脚本,数据被动态地添加到文件中。更多详情请查阅模板部分。
高级设置
先前目录未包含的设置。
- 时间格式(表格模式)Excel 文档中日期时间值使用的格式。
- 数字格式(表格模式)Excel 文档中数字使用的格式。 如果希望以相同的方式处理文档中的所有数字,请设置此项。
- 传播合并单元格值(表格模式)在表格模式下读取 Excel 时,勾选此选项可将每个合并单元格的值传播到合并区域中的所有行。此选项提供更完整的数据,但需要额外读取 Excel 文件,这可能会影响大型工作簿的性能。
- 本地文件名格式 用于为端口输出的消息分配文件名的方案。 可以在文件名中动态使用宏来包含标识符和时间戳等信息。 有关详细信息,请参阅宏。
高级页面
消息
消息设置 确定端口如何搜索消息并在处理后管理它们。 可以将消息保存到你的 已发送 文件夹,或者可以根据 已发送 文件夹方案将它们保存,如下所述。
- 保存至 Sent 文件夹 选中此选项可将端口处理的文件复制到端口的已发送文件夹中。
- 已发送文件夹方案 端口根据选定的时间间隔对已发送文件夹中的文件进行分组。例如,选项每周(Weekly)指示端口每周创建一个新的子文件夹,并将本周发送的所有文件存储在该文件夹中。空白设置告诉端口将所有文件直接保存在“Sent”文件夹中。对于处理许多事务的端口,使用子文件夹可以帮助保持文件有序并提高性能。
日志
- 日志级别 端口生成的日志的详细程度。 当端口请求支持时,请将其设置为 调试。
- 日志子文件夹方案:指示端口根据所选的时间间隔对日志(Logs)文件夹中的文件进行分组。每周(Weekly)选项(默认设置)指示端口每周创建一个新子文件夹,并将该周的所有日志存储在其中。如果此设置留空,则端口将所有日志直接保存在日志文件夹中。对于处理大量事务的端口,使用子文件夹有助于保持日志井然有序并提高性能。
- 保留消息副本 选中此项可使已处理文件的日志条目包含文件本身的副本。 如果禁用此功能,端口可能无法从 交易 选项卡下载文件的副本。
其他设置
- 延迟处理 放置在输入文件夹中的文件的处理延迟的时间量(以秒为单位)。 这是一个遗留设置。 最佳实践是使用 File 端口 来管理本地文件系统,而不是此设置。
特殊设置
特殊设置 适用于特定用例。
- 其他设置 允许在以分号分隔的列表中配置隐藏的端口设置,例如
setting1=value1;setting2=value2。 正常的端口用例和功能不需要使用这些设置。
模板
自动化页面
与端口自动处理文件相关的设置。
自动化设置
- 发送 到达端口的消息是否自动进行处理。
性能
与端口资源分配相关的设置。
- 最大工作线程数 此端口上处理文件时从线程池中消耗的最大工作线程数。如果设置,则会覆盖 高级设置 页面的 性能设置 部分的默认设置。
- 最大文件数 分配给端口的每个线程发送的最大文件数。如果设置,则会覆盖 高级设置 页面的 性能设置 部分的默认设置。
通知选项卡
与配置通知相关的设置。
在执行服务级别协议 (SLA) 之前,需要设置电子邮件通知以接收通知。默认情况下,知行之桥使用 通知 选项卡上的全局设置。要为此端口使用其他设置,请启用覆盖全局设置。
默认情况下,错误通知处于启用状态,这意味着每当出现错误时都会发送电子邮件。要关闭错误通知,请取消选中启用复选框。
输入主题(必填),然后(可选)输入以逗号分隔的收件人电子邮件列表。
SLA 选项卡
与配置服务级别协议 (SLA) 相关的设置。
SLA 允许配置预期流程中端口发送或接收的数据量,并设置预期达到该数据量的时间范围。当 SLA 未达到时,知行之桥会发送电子邮件警告用户,并将 SLA 标记为_存在风险_,这意味着如果 SLA 未能尽快达到,则会被标记为_已违反_。这让用户有机会介入并确定 SLA 未达到的原因,并采取适当的措施。如果在风险时间段结束时仍未达到 SLA,则会将 SLA 标记为_已违反_,并再次通知用户。
要定义 SLA,请启用预期数据量,然后点击设置选项卡。

- 如果端口具有单独的发送和接收操作,请使用单选按钮指定 SLA 适用的方向。
- 在窗口的预计至少部分中:
- 设置预计处理的最小事务数量(交易量)
- 使用每个字段指定时间范围
- 指示 SLA 生效的时间。如果选择开始于,请填写日期和时间字段。
- 勾选希望 SLA 生效的星期几对应的复选框。如有必要,请使用下拉菜单选择每天。
- 在窗口的将状态设置为“有风险”部分中,指定应将 SLA 标记为有风险的时间。
- 默认情况下,只有在违反 SLA 的情况下才会发送通知。要更改此设置,请勾选发送“有风险”通知。
以下示例显示了为端口配置的 SLA,该端口预计在周一至周五每天接收 1000 个文件。如果尚未收到 1000 个文件,则会在时间段结束前 1 小时发送风险通知。

注意:如果有必要,可以关闭 SLA 通知。这在维护窗口期间非常有用。点击导航栏上的设置,然后跳转到通知 > 通用通知。点击平板和铅笔图标进行编辑,并取消勾选 SLA 通知设置。
XML 到 Excel
下面的 XML 文件片段中在 /Items/Orders 下包含多个节点。
<Items>
<Orders>
<OrderNo>PO0012345</OrderNo>
<Customer>Teddy</Customer>
<Date>04/19/2023</Date>
<SubTotal>23.98</SubTotal>
<Items>
<Name>Teddy Bear</Name>
<Cost>14.99</Cost>
<Desc>Brown</Desc>
</Items>
<Items>
<Name>Truck</Name>
<Cost>8.99</Cost>
<Desc>Red</Desc>
</Items>
</Orders>
</Items>
将此 XML 文件转换为 Excel 时,你需要创建一个 Excel 模版。下图所示是一个简单的组合 xmlDOMSearch 和 xpath 的示例:

如上面例子中所示,每个 Excel 模版都包含如下要素:
- 静态列头。在例子中是 Order Details。
- 批注中的脚本。在示例的批注中的脚本应使用 xmlDOMSearch 运算器将输入的 XML 在指定的 XPath 进行循环。也同时配合使用了 arc:call。
- 单元格内的脚本。在示例中使用 xpath 格式化器从给定的 xpath 读取值(请注意,此 xpath 是一个相对路径,相对于作为参数提供给 xmlDOMSearch 运算器的路径)。
xmlDOMSearch 运算器和 xpath 格式化器的详情在下面描述。
xmlDOMSearch
xmlDOMSearch 需要两个参数:
- uri 参数
URI 是解析的 XML 文件的源路径。\[filepath\] 属性解析为端口的输入 XML 文件,URI 也应设置为该值。在上面的示例中,文件路径使用 urlencode 格式化器进行 URL 编码,以确保文件路径中的特殊字符不会阻止端口读取文件:\[filepath | urlencode\]。
- xpath 参数
xpath 是文档中循环的 XML 路径。运算器将会在每次遇到特定 xpath 时进行循环: /Items/Orders。这意味着每个 Orders 元素都是根 Items 的子级,会在生成的 Excel 文件中产生一组新输出。
xpath 格式化器
带有 xmlDOMSearch 运算器的 Excel 批注围绕着一块单元格,通过 xpath 格式化器引用输入的 XML。xpath 格式化器从输入 XML 特定的 xpath 下读取值。注意此 xpath 是一个相对路径,相对于作为参数提供给 xmlDOMSearch 运算器的路径。
在上面的示例中,第一个单元格使用 \[xpath("OrderNo")\] 填充。因为这个 xpatch 是相对的,单元格将使用输入 XML 中以下路径中的值进行填充:/Items/Orders/OrderNo。
如果 xmlDOMSearch 运算器循环不止一次(即找到该运算符的 “xpath” 参数的多个实例),那么在 Excel 批注之间的单元格块将会重复。新单元格是垂直添加的,因此在上面的示例中,第二个 OrderNo 单元格直接在第一个 批注 单元格下方。
Excel 到 XML
从 Excel 文件 转为 XML 文件,你需要创建一个自定义 XML 模版来使用 ArcScript 脚本。因为 XML 中不支持类似 Excel 文件中的脚本功能,所以结构和格式与 XML 到 Excel 有些不同。 注意:因为输入输出的格式五花八门,所以并没有一个通用的解决方案来应对所有情况。这里的例子仅仅是众多方案中的一个。你需要为你的需求来酌情设计。 本示例模版结合使用了标准 XML 语法和 ArcScript 脚本来读,处理和转换输入中的 Excel 文件。
<!-- Read Excel -->
<arc:set attr="xml.file" value="[FilePath]" />
<arc:set attr="xml.version" value="2007" />
这些 arc:set 代码指定文件的位置和用于创建文件的 Excel 版本。
<!-- Always use first sheet-->
<arc:call op="excelListSheets" in ="xml" out="sheet">
<arc:set attr="xml.sheet" value="[sheet.sheet]" />
<arc:break />
</arc:call>
<!-- read the headers into an array-->
<arc:set attr="xml.map:headers" value="A1:*1" />
<arc:call op="excelGet" in="xml" out="header">
<arc:enum attr="header.headers#">
<arc:set attr="data.headernames#" value="[_value | toalphanum | replace(' ','')]" />
</arc:enum>
</arc:call>
<arc:set attr="_log.info" value="[data.headernames#1]" />
<arc:enum range="A..Z">
<arc:set attr="tmp.cells#" value="[_value]" />
</arc:enum>
宏
在文件命名策略中使用宏可以提高组织效率和对数据的上下文理解。 通过将宏合并到文件名中,可以动态地包含相关信息,例如标识符、时间戳和消息头信息,从而为每个文件提供有价值的上下文。 这有助于确保文件名反映对组织重要的详细信息。
知行之桥 支持这些宏,它们都使用以下语法:%Macro%。
| 宏 | 描述 |
|---|---|
| ConnectorID | 替换为端口的 ConnectorID。 |
| Ext | 替换为端口当前正在处理的文件的文件扩展名。 |
| Filename | 替换为端口当前正在处理的文件的文件名(包括扩展名)。 |
| FilenameNoExt | 替换为端口当前正在处理的文件的文件名(不带扩展名)。 |
| MessageId | 计算端口输出的消息的 MessageId。 |
| RegexFilename:pattern | 将正则表达式模式应用于端口当前正在处理的文件的文件名。 |
| Header:headername | 替换为端口正在处理的当前消息的目标消息头 (headername) 的值。 |
| LongDate | 以常规格式计算系统的当前日期时间(例如,2024 年 1 月 24 日星期三)。 |
| ShortDate | 以 yyyy-MM-dd 格式计算系统的当前日期时间(例如 2024-01-24)。 |
| DateFormat:format | 以指定格式(format)计算系统的当前日期时间。 有关可用的日期时间格式,请参阅示例日期格式 |
| Vault:vaultitem | 计算指定保管库项目的值。 |
示例
某些宏(例如 %Ext% 和 %ShortDate%)不需要参数,但其他宏则需要。 所有带有参数的宏都使用以下语法:%Macro:argument%
以下是带有参数的宏的一些示例:
- %Header:headername%:其中
headername是消息上消息头的名称。 - %Header:mycustomheader% 解析为输入消息上设置的
mycustomheader消息头的值。 - %Header:ponum% 解析为输入消息上设置的
ponum消息头的值。 - %RegexFilename:pattern%:其中“pattern”是正则表达式模式。 例如,
%RegexFilename:^([\w][A-Za-z]+)%匹配并解析为文件名中的第一个单词,并且不区分大小写(test_file.xml解析为test) 。 - %Vault:vaultitem%:其中
vaultitem是 vault 中项目的名称。 例如,%Vault:companyname%解析为存储在保管库中的companyname项的值。 - %DateFormat:format%:其中
format是可接受的日期格式(有关详细信息,请参阅示例日期格式)。 例如,%DateFormat:yyyy-MM-dd-HH-mm-ss-fff%解析为文件上的日期和时间戳。
还可以创建更复杂的宏,如以下示例所示:
- 将多个宏组合在一个文件名中:
%DateFormat:yyyy-MM-dd-HH-mm-ss-fff%%EXT% - 包括宏之外的文本:
MyFile_%DateFormat:yyyy-MM-dd-HH-mm-ss-fff% - 在宏中包含文本:
%DateFormat:'DateProcessed-'yyyy-MM-dd_'TimeProcessed-'HH-mm-ss%
Excel 运算器
除了知行之桥提供的 运算器 之外,端口还可以提供将功能扩展到 ArcScript 的运算器。
这些端口运算器的调用方式与任何其他 ArcScript 运算器一样,但有两个细节除外:
- 必须通过
connector.rsc接口调用它们。 - 它们必须包含身份验证令牌。
例如,使用这两个规则调用端口运算器可能如下所示:
<arc:set attr="in.myInput" value="myvalue" />
<arc:call op="connector.rsc/opName" authtoken="admin:1j9P8v8b9K0x6g5R5t7k" in="in" out="out">
<!-- 处理此处运算器的输出 -->
</arc:call>
下面列出特定于 Excel 端口功能的运算器。
excelClose
关闭一个 Excel 连接。
可选参数
- handle:Excel 文件的句柄
输出属性
- success:如果连接成功关闭,则为 True
excelGet
查询特定的 Excel 工作表
必需参数
- sheet:Excel 工作表的名称
可选参数
- version:使用的 Excel 版本。默认值为 AUTO。 如果使用的是旧版 Excel,则只需选择其他版本。
- file:更新的 Excel 工作簿名称
- handle:Excel 工作簿的句柄
- map:*:这组输入包括属性名称和要从电子表格中检索其值的单元格名称的映射。例如,属性名称映射:值为 C1 的 MyValue 将使用在工作表中 C1 处单元格中找到的值来推送一个名为 MyValue 的属性。还可以指定一个范围的单元格名称来检索一个范围的单元格值
输出属性
- *:取决于工作表的内容和指定的查询。如果列标题存在,则它们将用于对输出属性的命名
excelListSheets
列出指定的 Excel 工作簿中的工作表
可选参数
- version:使用的 Excel 版本。默认值为 AUTO。 如果使用的是旧版 Excel,则只需选择其他版本。
- file:Excel 工作簿的路径
- handle:Excel 工作簿的句柄
输出属性
- isHidden: 如果工作表在 Excel 中从视图中隐藏,则返回 true。
- sheet:Excel 工作表的名称。注意名称是以 $ 结尾的。在为其它运算器指定工作表名称时,不需要这样做。
excelOpen
打开一个存在的 Excel 工作簿
必需参数
- file:Excel 工作簿的名称
可选参数
- version:使用的 Excel 版本。默认值为 AUTO。 如果使用的是旧版 Excel,则只需选择其他版本。
输出属性
- handle:Excel 工作簿的句柄