【UiPath】【DU】抽出結果からの値の取り出し方

# はじめに

- 本記事は、Document Understanding の***クラシックプロジェクトの抽出結果オブジェクト（ExtractionResult型）から値を取り出す方法***を扱います。
- モダンプロジェクトの抽出結果オブジェクトからの値取り出しは[***こちら***](https://qiita.com/Kajiita/items/f0f960aaf244b3aee9a8)
- 記事の内容は、個人の見解または確認結果であり、UiPath の公式見解ではありません。
- 製品仕様や参考画像は 24.10 バージョンのもので構成しています。

# 抽出結果オブジェクト

ExtractionResult型のガイドページ↓↓

https://docs.uipath.com/ja/activities/other/latest/document-understanding/extraction-result-class#definition

# 値の取り出し方（実装例）
## 任意の標準フィールドの値を取得

***抽出結果オブジェクト.GetSimpleFieldValues("★フィールドのID")***

::: note
★フィールドのIDはタクソノミーマネジャーで確認できます。
![DUの抽出4.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/42342c3f-ec64-33cc-9bf0-4fceaa93cfe5.jpeg)
:::

UiPath.DocumentProcessing.Contracts.Results.SimpleFieldValue のリストが返却されるので、次の手順で受ける側の変数を用意します。

変数の型で「Array of [T]」を選択

![DUの抽出1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/15ea0e01-c7b8-6d1a-1e92-137dffb59a29.jpeg)

「Browse for Types」よりデータ型を探しにいきます。

![DUの抽出2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/479750a0-9de3-0ba8-727a-e778789bae8e.jpeg)

UiPath.DocumentProcessing.Contracts.Results.SimpleFieldValue を選択しましょう。

![DUの抽出3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/83ceed24-1810-da81-85a9-69c9450e65d3.jpeg)

上で作成した変数（SimpleFieldValue）に「抽出結果オブジェクト.GetSimpleFieldValues("★フィールドのID")」を代入し、
SimpleFieldValueのリスト(0).RawValue で値を取り出します。
（複数値の場合は繰り返し処理（コレクションの各要素）などを使います。）

![DUの抽出5.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/4679596a-e21f-a248-bacc-264b4672fee2.jpeg)

## 任意の表データを取得

***抽出結果オブジェクト.GetTable("★表のID")***

返却されるのは単純なデータテーブルではないため、Cellsプロパティをつかって値を出力してみます。

繰り返し（コレクションの各要素）の要素に
***抽出結果オブジェクト.GetTable("★表のID").Values(0).Cells***
を指定します。
各要素（currentResultsTableCell）はセルの行・列のインデックスと値などを保持しています。

![DUの抽出6.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/97cb45d7-c2bf-2209-3f72-75087cd939fb.jpeg)

「セルに書き込み」アクティビティを例に説明すると
書き込み内容：　***currentResultsTableCell.Values(0).Value***
書き込む場所：　***EXCELファイルの参照名.Sheet("Sheet1").Cell(UiPath.Excel.Helpers.ExcelUtilities.ConvertColumnIndexToColumnLetter(currentResultsTableCell.ColumnIndex+1)+(currentResultsTableCell.RowIndex+1).ToString)***
の様に設定することで表データを出力できます。

::: note
列インデックスの変換（数字←→文字）には「ExcelUtilities」を使います。
:::
| 変換の例 | 構文 |
|:---:|:---:|
|列番号(2) → 列名称(B) |UiPath.Excel.Helpers.ExcelUtilities.ConvertColumnIndexToColumnLetter(2)|
|列名称(C) → 列番号(3) |UiPath.Excel.Helpers.ExcelUtilities.ConvertColumnLetterToColumnIndex("C")|

## 任意フィールドの値操作（半角スペース除去の例）

### 標準フィールド
![開発Tips2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/0d2d4e12-45b0-1363-a37a-1f208cb10d11.jpeg)
![開発Tips3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/69f1d4b0-5f50-aa3d-511e-d76a43cc7d02.jpeg)

繰り返し（コレクションの各要素）を配置し、入力に ***「自動抽出結果.ResultsDocument.Fields」*** を指定、データ型に ***「UiPath.DocumentProcessing.Contracts.Results.ResultsDataPoint」*** を指定します。
代入を配置し、左辺に ***「currentItem.Values(0).Value」*** 、右辺に ***「currentItem.Values(0).Value.ToString.Replace(" ","")」*** を指定します。
なお、キャプチャの例では ***「currentItem.FieldName = "自由記述欄"」***　と記述することで半角スペースを除去する項目を絞っています。

::: note
値が抽出されなかったケースでは「currentItem.Values(0)」でエラーとなってしまうため、代入の前に次の条件文を入れておくのをお勧めします。
***currentItem.Values.Length > 0 AndAlso currentItem.Values(0).Value.Contains(" ")***
:::

### 表フィールド

![DUの抽出7.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/7b2feaf1-914a-d0ea-1a39-e9c7ca173bcc.jpeg)

繰り返し（コレクションの各要素）の要素に
***抽出結果オブジェクト.ResultsDocument.Tables***
を指定し、さらに同アクティビティで
***currentItem.Values(0).Cells***
の要素を設定します。

データ抽出されたセルのみ対象とするために次の条件文を入れておきます。
***CurrentValue.IsMissing = False***

![DUの抽出9.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/cf8df968-23a1-d5c1-8d08-de56ce2e1a70.jpeg)

代入アクティビティを配置し、次の様に設定します。
左辺：　***CurrentValue.Values(0).Value***
右辺：　***CurrentValue.Values(0).Value.ToString.Replace(" ","")***

# さいごに
いかがでしたでしょうか。
[***モダンプロジェクトの抽出オブジェクト***](https://qiita.com/Kajiita/items/f0f960aaf244b3aee9a8)と比べるとクラシックの抽出オブジェクトは複雑なため、久しぶりに触ると沼ります。。。
意外とWEB上に参考ページがなさそうだったので整理して記事化しました。
DUを利用する皆様のお役に少しでも立てば幸いです。
最後までお読みいただきありがとうございます(・ω・)ノ

# 関連記事

抽出結果オブジェクトから直接ではなく、一度専用のアクティビティでエクスポートする実装例はこちら↓↓

https://qiita.com/Kajiita/items/1cd174ada00dd3055707