🐋作者简介:博主是一位.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

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


⭐写在结尾:

文章中出现的任何错误请大家批评指出,一定及时修改。

希望写在这里的小伙伴能给个三连支持

Logo

低代码爱好者的网上家园

更多推荐