UiPath Studio Community 2022.4.3
Windows
C#
用 3 种方法计算 Excel 文件中两列值的总和。创建一个工作流,将 A 列上的值与 B 列上的值相加,并以不同的方式将它们写入 C 列:
注意:使用下面的示例 Columns.xlsx 文件作为本练习的输入文件。
将解决方案分为 3 个序列:
解决方案 1 - 使 Excel 保持打开状态,并实时逐行写入结果,便于您查看更改:
此解决方案中的所有活动都应放置在 Excel 应用程序作用域容器中,该容器包含 Sample Columns.xslx 的完整路径。确保选中了“可见”选项。
使用**“读取范围”活动读取 Excel 文件。将范围设置为 “”,从而读取整个工作表,并且在输出参数中,使用快捷方式 Ctrl+K 来创建名为 “inputTable” 的数据表变量**;
使用**“遍历每一行”**活动并将其设置成遍历 “inputTable”。创建名为 “rowIndex” 的 Int32 变量 - 这将保持跟踪稍后要写入的行。在主体框内:
保持 Excel 关闭,在内存数据表中设置列值,并一次将所有表格添加至新的 Excel 文件,最后:
对于这个解决方案,我们不需要 Excel 应用程序作用域容器。
使用**“读取范围”活动读取 Excel 文件。将范围设置为 “”,从而读取整个工作表,并且在输出参数中,使用快捷方式 Ctrl+K 来创建名为 “inputTable” 的数据表变量**;
使用**“添加数据列”新建列 (“C”) 并将其添加至 “inputTable” 变量。务必将参数类型**设置为“对象”;
使用**“遍历每一行”**活动并将其设置为遍历 “inputTable”。在主体框内:
该解决方案最多涉及的是使用 Excel 命令。它应当完全包含在 Excel 应用程序作用域内。
使用**“读取范围”活动读取 Excel 文件。将范围设置为 “”,从而读取整个工作表,并且在输出参数中,使用快捷方式 Ctrl+K 来创建名为 “inputTable” 的数据表变量**;
使用**“分配”**活动来计算行的数目,并将其存储在新建的变量中。使用 ‘.Rows.Count’ 方法:rowsCount = inputTable.Rows.Count;
使用**“写入单元格”**活动来写入 “=SUM(A1,B1)” 至范围 ‘C1:Cx’,其中 x 为存储在 “rowsCount” 变量中行总数。
检查 Excel 文件中哪些发票是发给破产客户的,并计算要记录为亏损的发票总额。
输入文件:
使用**“”读取范围”活动来读取 .xlsx 文件,并将其存储在新建的数据表变量** (“invoicesDT”) 中;
使用**“读取 CSV”活动来读取 .csv 文件,并将内容存储在新建的数据表变量** (“clientsDT”) 中
添加**“联接数据表”活动将来自两个变量的数据合并成一个 (“resultsDT”)。输入数据表 1 应当为 “clientsDT”;并且输入数据表 2** 应当为 “invoicesDT”。使用两个数据表中的**“Client Name” 列作为联接条件,并且使用“左侧”联接类型**(从而仅保留在第二个数据表中为客户签发的发票)。
通过使用**“筛选数据表”活动,检查 “resultsDT” 中的哪些发票签发给了破产的公司。为此选择“保留”单选按钮**,并将 ‘IsBankrupt’ 用作筛选条件(值 “TRUE”)。您可使用该活动来删除不需要的一些列 - 转到**“输出列”选项卡,选中“删除”**按钮,然后写下不需要的列的名称(“ClientName_1” 和 “ClientId”)
要计算来自破产公司的亏损,遍历过滤后的数据表中的行,并将**“InvoiceValue”列**(已转换为 Integer)的内容添加到一个变量中,我们将在该变量中存储总和-整数类型的“totalLoss”。在主体框中通过以下方法使用**“遍历行”和“分配”**活动:totalLoss = totalLoss+Cint(row(“InvoiceValue”));
使用**“写入范围”活动,将筛选的数据表写入新的 Excel 文件。另外,您可使用“写入单元格”**活动,将总亏损信息添加至主表格之外的单元格,例如 H4 单元格。
我们有一张用卡支付的费用清单(房租、食物、水电费、休闲、储蓄)。我们发现有些交易不见了,因为它们是用现金支付的。准备一个工作流,将所有费用纳入一个文件,并计算每项费用的百分比。
输入文件:
使用 2 个“获取行项目”活动来将行项目捕获进 “Expense” 和 “Date” 列,并将它们存储于新建的变量(“ExpenseName” 和 “ExpenseData”);
使用**“分配”**活动来存储费用的值,并将它们存储于新的变量 (“ExpenseValue”)。方法的形式应当如下:ExpenseValue = row(“Value”).toString;
使用**“添加数据行”**活动,添加 “CardExpensesDT” 变量中 3 个变量的值,方法是在 **“数组行”**下写入 {ExpenseName, ExpenseData, ExpenseValue};
通过**“获取行项目”**活动获取来自行的日期值,并解析日期以获取月份。方法应当类似以下形式:ExpenseDate.Remove(0, 3).Remove(2, 5)。它的作用是先删除日,再删除年份;
如果”月份“集合不包含来自当前行的月份,则添加该月份。这使用”If 语句“活动来完成;
使用**“清除数据表”活动,以在每个循环开头确保 “monthlyDT” 始终为空。另外使用“分配”**活动,将 “monthlyTotal” 变量的值重置为 0(该变量将用于存储一个月的费用总值)
如果费用月份等于循环中的月份,将新的行添加至 “monthlyDT”。
使用**“对于每一行”**再次遍历“CardExpensesDT”的行,并且:
- 使用 **2 个“获取行项目”**活动来将信息捕获进 “Expense” 和 “Date” 列,并且将它们存储于变量(“ExpenseName” 和 “ExpenseData”);
- 使用**“分配”**活动将费用的值存储,并存储于新的变量 (“ExpenseValue”)。方法应当类似以下形式:ExpenseValue = row(“Value”).toString;
- 使用另一个**“分配”来提取月份并使用和上述相同的方法**将其分配至 “ExpenseMonth” 变量;
- 使用**“If 语句”来检查 “ExpenseMonth” 的值是否等于当前月份,由此完成循环;如果是,则通过以下方法**用费用值增大 monthlyTotal:Int32.Parse(ExpenseValue);
- 使用**“遍历每一行”来遍历 “monthlyDT” 变量并填写 “Percentage” 列,方法是使用”分配“活动以及以下方法**:row(“Percentage”) = (int32.Parse(row(“Value”).ToString) * 100 / monthlyTotal).ToString;
“Value”).ToString) * 100 / monthlyTotal).ToString;**