|
简介:
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) 点击浏览按钮
[img][/img]
并选取Excel文件。浏览窗口默认打开Project所在的文件夹。如果文件就在Project所在的文件夹下,部分路径会省略。比如"xls\science.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型。
[img][/img]
:设置多条件筛选的逻辑: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
|
|