• UiPath Level 1-Lesson 9. Excel & Data Tables


    简介:

    Excel是一种广泛应用的表格处理软件。本单元中,将介绍专门针对于Excel和DataTable型数据的活动以及与Excel交互的两种不同方式等。

    学习大纲:

    • 如何用Read Range活动从Excel文件中读取信息
    • 如何操作DataTable
    • 如何筛选表格数据
    • 如何使用Append Range活动

    1. 概念

    1) Excel相关的活动:在App Integration - Excel分类下。 

    2) DataTable相关的活动:在Programming - DataTable分类下。

    3) Excel Workbook (工作簿) vs. Data Table

    Workbook就是Excel文件,它可以包含各种类型的数据、工作表、也可以应用各种格式、布局、合并单元格等等。

    Data Table是最简单的表格数据,只包括行、列,也可以有标题行。


    2. 实例1

    目标:打开一个Excel文件并显示它的内容,最后将它存到一个新的Excel文件中。

    数据

    方法

    1) 首先,读取数据。添加一个Excel Application Scope活动

    在处理Excel文件时,添加的第一个活动总是Excel Application Scope活动。它是一个容器,其他与这个Excel文件相关的活动包括读取、写入等,都放在容器里运行。

    2) 点击浏览按钮 并选取Excel文件。浏览窗口默认打开Project所在的文件夹。如果文件就在Project所在的文件夹下,部分路径会省略。比如"xlsscience.xlsx"表示Project所在文件夹下(已省略)的xls文件夹里的science.xlsx文件。

    注意:Workbook Path参数也可以用变量代替来达到动态化。

    3) 设置Visible参数。此处取消选择Visible参数。

    Visible参数如果选中,表示使用Microsoft Excel应用程序来读取文件;如果未选中,则操作会在内部进行。

    区别

    使用Excel程序:必须安装Excel软件;可在同一个文件上运行多个进程;变化实时可见。比较适合调试程序和检测程序进度。

    直接访问:不需要安装Excel软件;一个文件只允许一个进程使用;只能用于xlsx格式的文件;进程在后台运行。

    4) 在Excel Application Scope容器里,添加一个Read Range活动

    Read Range活动可以读取Excel文件的一部分内容并把它存储到一个Data Table里。

    在Output里创建一个DataTable型变量DT1。在Input里,Range参数默认是空的,表示读取整个工作表的数据,可以为它设置具体的范围比如"A2:C3"。这里使用空值即可。

    5) 接下来,显示这个Data Table。添加一个Output Data Table活动

    虽然活动名为Output,但它不会把结果显示在Output面板上。该活动是将DataTable型数据转换成字符串型数据,以便于显示它。

    在Input里填上DT1,在Output里创建一个新的String型变量strDT。 

     

    6) 添加一个Message Box活动,并在Input里填入strDT,来显示Data Table。 

    7) 最后,把数据保存到一个新的Excel文件里。因为是新文件,要添加一个新的Excel Application Scope容器。

    指定数据写入的Excel文件所在的路径。如果路径下没有该文件,则将创建它。

    8) 添加一个Write Range活动

    在Write Range活动的Input里填上需要写入的DataTable型变量。StartingCell参数表示写入数据的起始单元格。如果指定的单元格区域已经存在数据,Write Range会把旧的数据覆盖掉

     

    AddHeaders参数

    在Read Range活动中,AddHeaders参数表示是否把第一行作为标题行;在Write Range活动里则表示,是否在写入数据时添加标题行。


    3. Excel和Data Table的其他常用活动

    1) Append Range活动

    和Write Range活动同样是写入数据,Append Range活动在工作表现有的数据之后写入数据,不会覆盖已有数据

    2) Build Data Table活动

    该活动可以创建一个DataTable型数据。

    • 单击DataTable...按钮以打开创建窗口。
    • 默认生成一行两列的Data Table。点击x号可以删除行列,点击+号可以添加新列。
    • 添加新列时会弹出New Column窗口。
    • 最后将创建的DataTable保存到Output变量里。

    3) Sort Data Table活动

    Input填入要排序的DataTable型数据;Output用来输出排序后的结果;Sorting Column指定要排序的列,它有三个参数,可任选一个来指定列。 

    • Column参数:指定实际的Column对象。
    • Index参数:指定列号。注意,DataTable数据都是从0开始索引的 (0-indexed),即第一列的列号是0。
    • Name参数:指定列标题。

    4) Read Cell活动 Write Cell活动

    5) Select Range活动:选中单元格或单元格区域。

    6) LookUp Range活动:在工作表里查找某个特定值。


    4. 实例2

    数据:大约有300条数据。

    目标1:

    筛选并显示年龄小于30且薪水大于$100,000的记录。

    方法1:

    1) 添加一个Excel Application Scope容器,在里面添加一个Read Range活动来读取数据,将数据存储到变量DT1中。

    2) 在Excel Application Scope容器外添加一个Filter Table活动筛选数据。

    Filter Rows Tab:

    • Input DataTable:数据源。
    • Output DataTable:筛选结果。可以和Input DataTable使用同一个变量。
    • Keep Rows/Romove Rows:保留/删除符合条件的行。
    • Column:列标题,必须是String型。
    • Operation:大于、小于等条件。
    • Value:支持多种类型的数据,可以不是String型。
    • :删除/添加新的条件。
    • :设置多条件筛选的逻辑:And或Or。单击And即可切换成Or。

    Output Columns Tab:

    • Keep Columns/Remove Columns:保留/删除筛选条件的所在列,此例中为Age和Pay列。

     3) 添加一个Output Data Table活动Message Box活动来显示筛选结果。

    目标2:

    使用已有的数据创建一个新的DataTable,包括姓名、年龄和收入三列。

    方法2:

    1) 添加一个Excel Application Scope容器,在里面添加一个Read Range活动,选上Add Headers参数,将数据存储到变量DT1中。 

    2) 在容器里添加一个Build Data Table活动,添加Name、Age和Income三列,并存储到变量newDT中。

    3) 在容器外添加一个For Each Row活动,在In里设置在哪个Data Table中循环。

    • For Each Row活动是Data Table专用的,它可以遍历Data Table里的每一行。For Each活动比较通用。

    4) 在For Each Row活动的Body中添加三个Get Row Item活动,它可以输出当前行里某个特定单元格的值。

    • ColumnIndex:填索引号,从0开始。
    • ColumnName:填列标题,前提是选中Add Headers参数。
    • Row:填row即可。

    *ColumnIndex和ColumnName选择后者可以更好的适应添加/删除列的情况。

     

    5) 在最后一个Get Row Item活动之后添加一个Add Data Row活动

    • Array Row:要添加的信息,以数组的形式出现。此例中填入{name, age, income}。
    • DataTable:要添加行的DataTable。此例中为newDT。

    6) 在For Each活动的下面添加一个Excel Application Scope容器。在其中添加一个Write Range活动写入数据。


    5. 练习1

    数据

    要求:通过三种不同的方式得到A列和B列单元格的和,并写入C列。

    • 方法1:Excel保持打开的状态并实时写入数据,你可以看见每一行的变化。
    • 方法2:Excel处于关闭的状态,将每一个列的值存储到Datatable中,最后把得到的结果一次性写到Excel里。
    • 方法3:使用Excel公式计算。

    方法1:

    • 添加一个Excel Application Scope活动。填入数据所在的工作簿的完整路径,确保Visible参数被选中。
    • 在Excel Application Scope容器里添加一个Read Range活动。设置Range参数为以读取整个工作表,将读取的数据存储到变量inputsTable中。
    • 在Read Range活动后添加一个For Each Row活动,设置该活动在inputsTable中循环。
    • 在For Each Row容器里添加一个Assign活动。创建一个Int32型变量rowIndex,将inputsTable.Rows.Indexof(row)+1赋值给rowIndex。
      • 这样做使rowIndex的值等于目前正在For Each Row活动中循环的行在Excel中的行号。+1是因为DataTable的行号是从0开始的。
    • 在Assign活动后添加两个Get Row Item活动
    • 第一个Get Row Item活动设置ColumnIndex参数为0 (A列),Row参数为row (临时循环变量),将读取的数据存储到变量valueA中。
    • 第二个Get Row Item活动设置ColumnIndex参数为1 (B列),Row参数为row (临时循环变量),将读取的数据存储到变量valueB
    • Below that activity, find and add two Get Row Item activities
    • 添加一个Assign活动。创建变量valueC,使它等于valueA+valueB。
    • 添加一个Write Value活动。设置Range参数为"C"+rowIndex.ToString,设置Value参数为valueC。  

      

      

    方法2:

    (不使用Excel Application Scope活动,自动化在内部完成。)

    • 添加一个Read Range活动,设置工作簿的路径,创建变量 inputsTable
    • 添加一个Add Data Column活动,设置ColumnName参数为C,设置DataTable参数为inputsTable。设置Argument Type为object。

      

    • 添加一个For Each Row活动,并在inputsTable中循环。
    • For Each Row活动的容器中添加两个Assign活动。一个把row(0).ToString的值赋给变量valueA;一个把row(1).ToString的值赋给变量valueB
      • row(0).ToString和row(1).ToString把对象转换为更便利的文本型的数据。
    • 再添加一个Assign活动,把Integer.Parse(valueA) + Integer.Parse(valueB)的值赋给row(2)。
      • Integer.Parse是一种VB方法,可以把字符串型数据转换为数字型数据。
    • 在For Each Row活动的后面添加一个Write Range活动,设置DataTable参数为inputsTable,设置Starting Cell参数的值为空,并设置一个新的工作簿路径。
      • 如果文件不存在,UiPath会自动创建该文件。

      

    方法3:

    (使用Excel公式计算。)

    • 添加一个Excel Application Scope活动。设置工作簿的路径,选中Visbility选项。
    • 在Excel Application Scope容器里添加一个Read Range活动,创建DataTable型变量inputsTable
    • 添加一个Assign活动,将 inputsTable.Rows.Count赋值给一个新的变量rowsCount
    • 添加一个Write Value活动,设置写入的Range为:"C1:C" + rowsCount,设置写入的值为"=SUM(A1,B1)"。
      • Excel会自动将写入的值按照行号迭代。

       


    *本课使用的新活动、方法、函数等:

    • Excel Application Scope
    • Read Range
    • output data table
    • Write Range
    • Append Range
    • Build Data Table
    • Sort Data Table
    • Read Cell
    • Write Cell
    • Select Range
    • LookUp Range
    • Filter Table
    • For Each Row
    • Get Row Item
    • Add Data Row
    • Write Value
    • Integer.Parse:VB方法,可以把字符串型数据转换为数字型数据。
    • Rows.Count
  • 相关阅读:
    leetcode 之 Palindrome Partitioning
    虚拟机共享文件夹下tar
    leetcode 之 Excel Sheet Column Number
    AndroidHttpClient & jsoup 解析 正方教务系统
    查看android下的分区表
    ubuntukylin 下编译 android4.4
    android:layout_weight 和 android: weightSum的使用
    Intent 与Bundle的传值关系
    使用自定义的Toast
    SlideMenu例子解析2
  • 原文地址:https://www.cnblogs.com/TeresaMu/p/9929208.html
Copyright © 2020-2023  润新知