2

我在我的 UIPath 项目中实现了一个普通的“for each”循环(不是每行特定的 excel)。

for-each 循环使用以前从 excel 文件中检索到的数据查看数据表。

然后,for-each 循环在 Data 中迭代,并在其后加上 if-else。

可以说如下:

for each item in dataTable:

if (content of item == "10")
{
write cell: "Test" into A + index.ToString() 
// leads for instance to writing into excel column 'A1' 
}

else 
{ write cell: "ElseTest" into for C + index.ToString() }

- 我使用语法只是为了演示目的.. :D

-> 所以问题是: 写入单元格需要花费很多时间,而在 if 和 elses 中输出一个带有随机文本的 MessageBox 则在几毫秒内完成,所以 for-each-loop 不会是问题...

我在打开任务管理器的情况下运行了该过程,发现 Excel 启动了,CPU 百分比急剧增加,立即跳到 0% ......同样的情况再次发生,对于循环中的每次迭代。

这是为什么? 有没有更优化的方法来做到这一点?

我需要 for-each 结构,因为我需要检查它在单元格内是值 1 还是值 2...

我的 Excel Scope 的图片

4

2 回答 2

0

一种可能的选择是使用Read Range活动,操作DataTable对象本身,然后最后使用Write Range活动将所述对象写回相同的范围。

这是一个例子。我的工作表包含 100 行,A 列中的所有数字都从 1 到 100。只要单元格中有“1”,数据就会被覆盖(在DataTable对象中)。

在此处输入图像描述

于 2019-01-17T07:42:56.177 回答
0

我认为在每次迭代中打开 excel 都是耗时的部分,所以我建议

  1. 在你为每个之前打开 excel
  2. 在 foreach 中使用附加窗口活动(https://activities.uipath.com/docs/window-scope)将焦点设置在 excel 文件上
  3. 在 foreach 之后或完成 excel 文件后关闭 excel

如果您不使用它,我强烈推荐重构(https://github.com/UiPath/ReFrameWork/tree/master/Framework )。这是 RPA 项目的绝佳起点。

如果您正在使用重构,您可以在 InitAllApplications.xaml 中打开您的 excel 文件,在 Process.xaml 中执行您的操作,并在 CloseAllApplications.xaml 中关闭您的 excel。

于 2019-01-15T14:55:18.780 回答