🐋作者简介:博主是一位.Net开发者,同时也是RPA和低代码平台的践行者。
🐬个人主页:会敲键盘的肘子
🐰系列专栏:UiPath
🦀专栏简介:UiPath在传统的RPA(Robotic process automation)的基础上,增加了See(AI通过计算机视觉阅读用户的计算机屏幕)和Think(通过机器学习来发现平台能够为用户构建什么自动化流程)从而不断帮助用户自动化构建流程,而不仅仅是用户自主发现,自主构建。并且在构建的过程当中,做到了Low-code甚至是No-code的程度,让每一位员工都可以自主使用。
🐶座右铭:总有一天你所坚持的会反过来拥抱你。
🌈写在前面:
在RPA之前的博客中,我们已经了解了使用一些常见数据类型(如字符串、列表和字典)的基本数据操作。
在本文中,我们将介绍一些更高级的数据处理技术。我们将使用DateTime变量,并学习如何使用Select方法筛选DataTables。
👉本文关键字:RPA、UiPath、Low-code、No-code、.Net
文章目录
- 1️⃣ 背景
- ♈ 什么是RPA
- ♉ 什么是UiPath
- ♊ 为什么使用UiPath
- ♌ 本文收获
- ♎ 环境
- 2️⃣ DateTime
- ♉ 概述
- ♈ 业务场景
- ♊ 示例
- ⭐ ToString(“yyyy-MM-ddThh:mm:sszzz”)
- ⭐ DateTime.Parse
- ⭐ DateTime.ParseExact
- ⭐.AddHours
- ⭐ .Subtract
- ⭐ Math.Abs
- 3️⃣ Select方法
- ♉ 概述
- ♈ 业务场景
- ♊ 示例
- 4️⃣ 总结
- 5️⃣ 参考资料
1️⃣ 背景
♈ 什么是RPA
RPA(Robotic process automation) 代表机器人过程自动化。
它是一种软件程序,可在与计算机应用程序交互时模仿人类行为并实现重复的、基于规则的流程的自动化。
♉ 什么是UiPath
UiPath 是一种机器人流程自动化工具,用于自动化枯燥和重复的任务。它由罗马尼亚企业家 Daniel Dines 和 Marius Trica 于 2005 年创立。它还消除了自动化无聊任务的人工干预,并为所有活动提供了拖放功能,它是最简单的 RPA 工具。
♊ 为什么使用UiPath
UiPath在传统的RPA的基础上,增加了See(AI通过计算机视觉阅读用户的计算机屏幕)和Think(通过机器学习来发现平台能够为用户构建什么自动化流程)从而不断帮助用户自动化构建流程,而不仅仅是用户自主发现,自主构建。并且在构建的过程当中,做到了Low-code甚至是No-code的程度,让每一位员工都可以自主使用。
♌ 本文收获
- 使用DateTime变量执行数据操作。
- 使用Select方法筛选DataTables。
♎ 环境
-
UiPath Studio Community 2022.4.3
-
Windows 10
-
.Net
2️⃣ DateTime
♉ 概述
顾名思义,DateTime(System.DateTime)
是一种变量类型,它使您能够存储有关日期和时间的信息。
这种类型的变量可以在系统名称空间System.DateTime
下并选择.Net类型窗口中找到。
♈ 业务场景
在以下情况下使用时间敏感的文档(如发票):
-
时间格式在整个过程中变化。
-
在处理文档时需要增加或减少特定的时间量。
♊ 示例
我们将首先声明一个名为DateTimeVar的变量。
我们使用System.DateTime
类型。用Now初始化变量,这是一个返回当前日期和时间的方法。
要将DateTime变量转换为字符串,我们将使用ToString方法。这将以不变区域性格式显示日期。要将结果打印到输出面板,我们将添加一个LogMessage
活动,并键入DateTime变量.ToString
作为消息。
现在让我们运行文件。日期和时间打印在“输出”面板中。
⭐ ToString(“yyyy-MM-ddThh:mm:sszzz”)
如果我们想将日期转换为特定的字符串格式,可以通过将所需的格式指定为ToString方法的参数来实现。让我们将此日期转换为ISO 8601格式,这是一种标准化的国际日期格式。无论何时,我们都要确保月份使用大写“M”,分钟使用小写“m”。我们将使用小写“h”表示12小时格式,使用大写“H”表示24小时格式。“T”是用作ISO格式分隔符的字符,“zzz”表示时区。
DateTimeVar.ToString(“yyyy-MM-ddThh:mm:sszzz”)
我们再次运行该文件以查看结果。
正如我们在输出面板中看到的,我们有年、月、日、小时、分钟、秒和时区。
⭐ DateTime.Parse
接下来,让我们看看如何使用DateTime处理从String到DateTime的转换DateTime.Parse
方法。默认情况下,如果我们使用DateTime.Parse
方法,Studio将假定提供的日期是根据不变量区域性格式化的。
我们将在日志消息之前添加一个Assign
活动,并在To字段中添加变量。
在“值”字段中,我们将使用DateTime。解析将2021 4月16日的字符串转换为DateTime。字符串中日期的格式为:月、日、年。
DateTime.Parse(“04/16/2021”)
让我们尝试以另一种格式提供字符串类型的日期,看看它是否仍然被识别。我们将使用日、月、年。
DateTime.Parse(“16/04/2021”)
正如我们所看到的,它抛出了一个错误,因为在不变量文化格式中,月份必须是第一个,而16不是有效的月份号。
⭐ DateTime.ParseExact
对于我们确切知道接收日期的格式的情况,我们可以使用DateTime.ParseExact
需要两个额外的参数:一个用于预期格式,另一个用于指定区域性。
DateTime.ParseExact(“16/04/2021”,”dd/MM/yyyy”, CultureInfo.InvariantCulture)
让我们再次运行该文件。
我们已经解决了这个问题,并且在“输出”面板中正确显示了日期。
如果我们可能以多种格式接收日期,我们可以将它们指定为类似这样的字符串数组。要像这样使用ParseExact
,我们还需要提供第四个参数DateTimeStyles
,它提供有关所提供日期格式的附加信息。要指定的典型值是1。
DateTime.ParseExact(“16/04/2021”,{”dd/MM/yyyy”, “dd.MM.yyy”}, CultureInfo.InvariantCulture, DateTimeStyles.None)
让我们再次运行工作流。
它使用当前字符串格式的日期。让我们用第二种格式来测试它。我们将运行该项目。我们可以在输出面板中注意到,结果保持不变。
⭐.AddHours
在不同的过程中可能有用的操作是从Datetime变量中添加或减去时间。这可以通过使用以下方法来完成。
我们只需键入“Add”,然后键入所需的时间单位。在这种情况下,我们将添加“小时”。
作为参数,我们需要提供要添加的单元数。让我们将当前时间加上两个小时。
DateTimeVar.AddHours(2)
现在让我们运行工作流!这是我们的结果。
如果我们想减去时间单位,我们将使用负值作为参数。让我们从当前时间中减去15小时,然后单击跑步。
DateTimeVar.AddHours(-15)
看起来我们的约会已经减去了15个小时。
让我们尝试另一个例子,这次我们增加14天。
DateTimeVar.AddDays(14)
这同样有效!
⭐ .Subtract
接下来,让我们看看如何评估两个日期之间的差异。我们需要了解自年初以来已经过去了多少天。
为此,我们需要声明一个新的DateTime变量,我们将其命名为“StartOfYear”。此变量将存储一年中的第一天。让我们将类型设置为DateTime,并使用DateTime。用于设置日期的Parse方法。
要输出差值,我们可以使用减法。让我们根据需要的结果选择时间单位。
让我们为这个例子选择几天,然后运行我们的项目。
DateTimeVar.Subtract(StartOfYear).TotalDays.ToString
距离年初已经过去了108天半。
如果我们从较早的日期中减去较晚的日期,结果将为正。如果切换顺序,结果将为负。
StartOfYear.Subtract(DateTimeVar).TotalDays.ToString
我们得到了预期的结果。
⭐ Math.Abs
如果顺序不相关,我们只想得到一个肯定的结果,我们可以使用Math.Abs
方法显示绝对值。
Math.Abs(StartOfYear.Subtract(DateTimeVar).TotalDays).ToString
运行该项目以查看结果。减法的另一种选择是只在两个日期之间使用减号。
Math.Abs((StartOfYear-DateTimeVar).TotalDays).ToString
我们得到了同样的结果。
3️⃣ Select方法
♉ 概述
Select方法通常用于检索DataTable中与筛选条件匹配的行项数组。
♈ 业务场景
使用select方法使用多个条件筛选数据表,然后将结果输出到不同的数据表。
♊ 示例
让我们看看我们的数据。这里我们有一份待租公寓的清单。正如我们所看到的,数据的结构是一个表。
我们希望将此电子表格中的信息存储在DataTable变量中,并使用Select方法使用多个条件筛选公寓。
让我们从一个简单的选择开始。我们会取回所有宠物友好型公寓。为此,我们将首先在项目中添加Read Range
活动,指明包含列表的文件,然后删除“范围”属性字段中的值。
接下来,我们将创建一个DataTable变量,在其中存储结果。让我们把它命名为Apartments
。
为了从列表中筛选公寓,我们只需要添加一个Assign
活动并键入Select语法。
对于输出,我们可以使用原始DataTable变量或创建一个新变量。
我们将其命名为FilteredApartments
,我们还需要将其类型更新为System.Data.DataTable。
让我们在Assign
活动的“To”字段中添加新变量。
对于“值”字段,我们将打开“表达式编辑器”(Expression Editor),以便可以完整地查看“选择”(Select)语法。
我们将首先输入Apartments,输入变量的名称.CopyToDataTable
。
在括号内,我们需要提供用于在引号之间过滤的表达式,因为它需要采用字符串格式。
让我们把这个分解。我们必须在方括号之间提供列名,然后是运算符,然后是所需的值。如果所需的值也是字符串,我们将其添加到撇号之间。过滤器表达式是在引号之间输入的,因为它是一个字符串。让我们添加.CopyToDataTable
。
接下来,我们希望添加一条日志消息,以标记进程的结束并切换断点。
我们将在调试模式下快速运行工作流文件,并在Locals
面板中查看发生了什么。
看起来执行已到达断点。
Locals
面板上的快速注释。它显示属性或活动以及用户定义的变量和参数。当我们想在任何时候检查流程的执行时,这是一个非常方便的工具。
在Locals面板中的Variables下,我们可以看到输入和输出变量Apartments和FilteredApartment。
当我们单击公寓的“查看更多”按钮时,我们可以看到原始的DataTable。
当我们单击FilteredApartments变量的View More(查看更多)时,我们可以看到只包含宠物友好型公寓的过滤后的公寓。完美的
好的,到目前为止,我们只使用一个标准过滤了输入DataTable。让我们看看如何添加更多内容。
现在,我们想找回所有价格在400到800之间、房间数量不同于1的宠物友好型公寓。
让我们转到我们的Assign活动并修改我们之前添加的语法。
为了获得我们想要的结果,我们将在条件之间使用逻辑运算符AND。
我们希望“价格”列中的值大于400且小于800,并且“房间数列”中的值不等于1。
我们可以添加一个排除标准,方法是将其括在括号中,并在前面输入“NOT”。
还要注意,我们没有对任何数值使用撇号。
让我们以调试模式运行工作流文件。
正如我们所看到的,只有4套公寓符合我们的标准。
但是,如果我们应用的标准太严格,数据表中没有返回任何行,会发生什么?
为了测试这一点,让我们删除前面的标准,然后更新语法以仅检索价格低于100的公寓。
让我们运行工作流文件。
我们收到名为“使用select筛选数据表”的Assign活动引发的错误。由于筛选太严格,因此没有留下行。
我们很可能会在生产中遇到这种情况。那么我们该如何解决这个问题呢?
我们可以通过在语法中添加if运算符来防止此错误。基本上,如果没有返回行,我们将只克隆原始数据表。
让我们花点时间来理解这个表达式。
该条件测试Select方法的结果。.Any
方法返回一个布尔值,如果至少返回一行,该值为True,如果没有返回任何行,则为False。
如果条件为True,我们将像前面的情况一样继续过滤。如果条件为False,我们克隆ApartmentsDataTable变量的结构,以便将其分配给FilteredApartments。
让我们再运行一次我们的项目。
正如预期的那样,我们有一个原始数据表的空克隆。
4️⃣ 总结
-
我们可以使用System声明DateTime变量。DateTime类型并使用Now方法分配当前日期。
-
我们可以使用
ToString
方法将DateTime值转换为字符串。我们可以使用DateTime。解析方法以将字符串值转换为DateTime。 -
我们可以使用DateTime。当我们确切知道将以字符串形式接收日期的格式时,使用
ParseExact
方法。 -
Add
方法允许我们在处理DateTime变量时加减时间。 -
要获得两个日期之间的差异,我们可以使用减法。最后,但并非最不重要的是,
Math.Abs
方法帮助我们获得日期差的绝对值。
5️⃣ 参考资料
DateTime Variables
⭐写在结尾:
文章中出现的任何错误请大家批评指出,一定及时修改。
希望写在这里的小伙伴能给个三连支持!