Как прочитать лист Excel и поместить значение ячейки в разные текстовые поля через UiPath?

Как прочитать лист Excel и поместить значение ячейки в разные текстовые поля через UiPath?

У меня есть таблица Excel следующего содержания:

SAP_excel

Я прочитал содержимое Excel и, чтобы перебрать содержимое позже, я сохранил содержимое в Output Data Table следующим образом:

  • Диапазон считывания - выход:

    • DataTable: CVdatatable
  • Таблица выходных данных

    • DataTable: CVdatatable
    • Текст: opCVdatatable

Скриншот:

SAP_OutputDataTable

Наконец, я хочу прочитать text opCVdatatable на итерации и записать их в текстовые поля. Итак, в нужных полях Input я упомянул opCVdatatable или opCVdatatable+ "[k(enter)]", как требуется.

Скриншот:

SAP_iterate_OutputDataTable

Но кажется, что UiPath начинается с начала таблицы выходных данных всякий раз, когда я вызываю opCVdatatable.

Короче говоря, каждое желаемое поле Input итеративно заполняется всеми данными данными, хранящимися в таблице выходных данных.

Кто-нибудь может мне помочь, пожалуйста?


person DebanjanB    schedule 15.02.2019    source источник
comment
На всякий случай я понимаю - вы хотите, чтобы первое поле содержало XK01 (транзакция, строка 1), второе - 1000 (строка 2), третье - 1000 (строка 3) и так далее - это правильно?   -  person Wolfgang Radl    schedule 15.02.2019
comment
@WolfgangRadl Да, вы все правильно поняли. Однако есть небольшой прогресс, и я уточню этот вопрос.   -  person DebanjanB    schedule 15.02.2019


Ответы (2)


Моя первая рекомендация - использовать Workbook: Read range activity для чтения данных из Excel, потому что это быстрее, работает в фоновом режиме и не требует установки Excel в системе.

Начните свою последовательность следующим образом (обратите внимание, что свойство добавления заголовков не проверено):

Вам не нужно использовать Output Data Table, потому что это действие выводит строку, содержащую все элементы строки. Вместо этого вы хотите получить доступ к элементам в таблице данных и вывести каждый из них в виде строки в вашем type into, например, CVDatatable.Rows(0).Item(0).ToString, например:

Вы упомянули, что хотите прочитать текст opCVdatatable на итерации и записать его в текстовые поля. Это немного сложнее, но я приведу вам пример. Вы можете использовать действие For Each Row и перебирать каждую строку в CVDatatable, при необходимости задавая свойство index. См. ниже:

Задача состоит в том, чтобы правильно настроить селектор и сделать его динамическим, чтобы он нацеливался на разные текстовые поля на каждой итерации. Выбор действия type into будет зависеть от целевой системы, но вот пример:

И селектор для этого:

Кроме того, вы можете протестировать рабочий файл XAML.

Надеюсь это поможет.

Крис

person Cristophs0n    schedule 15.02.2019
comment
@DebanjanB - Никаких проблем. Рад помочь. - person Cristophs0n; 15.02.2019
comment
Похоже, у нас была одна и та же идея в одно и то же время, @ Cristophs0n :) - person Wolfgang Radl; 15.02.2019
comment
Ну, ты знаешь, что говорят о великих умах ... @Wolfgang Radl - person Cristophs0n; 15.02.2019
comment
DataTable, названный как cvdt, cvdt.Rows(0).Item(0).ToString+ "[k(enter)]", cvdt.Rows(1).Item(0).ToString и так далее, помогал даже при вызове из последовательности Присоединить окно, отбрасывая OutputDataTable и даже foreach цикл. - person DebanjanB; 18.02.2019
comment
@DebanjanB Рад, что вас разобрали. - person Cristophs0n; 18.02.2019

Вот другой, более общий подход. Вместо того, чтобы включать цель в сам процесс, Excel будет изменен, чтобы включить части селектора:

введите описание изображения здесь

Обратите внимание, что столбец B теперь содержит идентификатор, и этот идентификатор зависит от приложения, с которым вы будете работать. Например, вот как выглядит мой пример приложения. Как видите, первое текстовое поле имеет идентификатор 585, второе - 586 и т. Д. (Обратите внимание, что вы можете работать с любым идентификатором, включая имя элемента управления, если он открыт для UiPath):

uiexplorer

Теперь вместо добавления нескольких элементов Type Into в рабочий процесс вы должны добавить только один, перебрать каждую строку таблицы данных, а затем создать динамический селектор:

рабочий процесс

В моем случае селектор для действия Type Into выглядит следующим образом:

"<wnd cls='#32770' title='General' /><wnd ctrlid='" + row(1).ToString() + "' />"

Это позволит вам поддерживать процесс только на листе Excel - если есть новое поле, которое необходимо сопоставить, просто добавьте его на свой лист. Никаких изменений в рабочем процессе не требуется.

person Wolfgang Radl    schedule 15.02.2019
comment
Просто чтобы убедиться, что я понял вашу концепцию и решение, как вы упомянули ... обратите внимание, что вы можете работать с любым идентификатором, включая имя элемента управления, если он открыт для UiPath ... согласно демонстрации < предоставленный вами снимок href = "https://i.stack.imgur.com/Ckdb0.png" rel = "nofollow noreferrer">, элемент явно имел ctrlid открыт, который мне кажется недоступным для SAP UI TCODE поле, с которым я сейчас работаю. Я прав? - person DebanjanB; 18.02.2019
comment
Кроме того, не могли бы вы подсказать мне, могу ли я сгенерировать статический ctrlid и создать селектор, я смогу прикрепить его к определенному элементу управления, чтобы действие Type Into стало похоже на "<wnd cls='#32770' title='General' /><wnd ctrlid='" + row(1).ToString() + "' />", которое вы предоставили? - person DebanjanB; 18.02.2019
comment
Последний встречный вопрос: если ctrlid равен 585 в B1 ячейке, как он ссылается на значение в A1 ячейке, которая содержит строку XK01? - person DebanjanB; 18.02.2019
comment
Похоже, что ctrlid не отображается для указанных полей, но другое свойство: tbar[0]/okcd. Я могу только предположить, что этот атрибут отличается для каждого отдельного текстового поля, например. tbar[1]/okcd для следующего. Итак, ваш столбец B будет содержать это значение. Тогда ваш селектор может выглядеть так: <wnd cls='#32770' title='General' /><wnd id=tbar['" + row(1).ToString() + "']/okcd />". Само значение затем используется в свойстве Text действия Type Into: row(0).ToString(). - person Wolfgang Radl; 18.02.2019
comment
Не могли бы вы указать мне на какую-нибудь документацию по ctrlid, пожалуйста, о как они создаются, сроке действия вместе с ctrlid дочерних локаторов , timeStamp и fingerprint? - person DebanjanB; 20.02.2019