уипат "для каждого" отнимает много времени - PullRequest
0 голосов
/ 15 января 2019

В моем проекте UIPath я реализовал обычный цикл для каждого (не для каждого ряда).

Цикл for-each просматривает таблицу данных с ранее извлеченными данными из файла Excel.

Затем цикл for-each итерирует данные, если за ними стоит 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

-> Итак, проблема в следующем: запись в ячейки отнимает столько времени , в то время как создание MessageBox со случайным текстом внутри if и elses выполняется в миллисекундах, поэтому цикл for-each-can может это не проблема ...

Я запустил этот процесс с открытым диспетчером задач и обнаружил, что Excel запускается, загрузка ЦП сильно увеличивается, мгновенно скачет до 0% ... то же самое происходит снова для каждой итерации цикла.

Почему это? Есть ли более оптимизированный способ сделать это?

Мне нужна структура for-each, потому что мне нужно проверить, является ли она значением 1 или значением 2 внутри ячейки ...

Picture of my Excel Scope

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Один из возможных вариантов - использовать действие Read Range, манипулировать самим объектом DataTable, а затем в конце записать указанный объект в тот же диапазон, используя действие Write Range.

Вот пример. Мой лист содержит 100 строк со всеми числами от 1 до 100 в столбце A. Если в ячейке есть «1», данные будут перезаписаны (в объекте DataTable).

enter image description here

0 голосов
/ 15 января 2019

Я думаю, что открытие Excel на каждой итерации занимает много времени, поэтому я предлагаю

  1. открой Excel перед тобой для каждого
  2. используйте действие окна прикрепления (https://activities.uipath.com/docs/window-scope) внутри вашего foreach, чтобы установить фокус на файл Excel
  3. закрыть Excel после вашего foreach или когда вы закончите с файлом Excel

Я бы настоятельно рекомендовал reframework (https://github.com/UiPath/ReFrameWork/tree/master/Framework), если вы его не используете. Это отличная отправная точка для проектов RPA.

Если вы используете reframework, вы можете открыть свой файл Excel в InitAllApplications.xaml, выполнить свои операции в Process.xaml и закрыть свой Excel внутри CloseAllApplications.xaml.

...