3.A.4.2. 各インボイスについて

最初のアクティビティは、ディレクトリをループして、そこに含まれるすべてのファイル名を返します。

まずAssignアクティビティをドラッグして、ループさせたいディレクトリの絶対パスを変数に代入します(例:path)。

images/openrpa_workflow_example_read_excel_assign_path.png

ForEachWithBodyFactory<>アクティビティをメインシーケンスにドラッグします。

プロパティボックス内の適切なTypeArgumentパラメータをStringに設定します。これは、反復処理されるディレクトリにファイルパスが含まれ、それがString型の値として返されるためです。

アクティビティの右側で、filePathに割り当てられているアイテム変数を変更します。

アクティビティの左側に、System.IO.Directory.GetFiles(path)を挿入してください。

filePath変数に、各請求書のフルファイルパスへの文字列が入るようになりました。

images/openrpa_workflow_example_read_excel_for_each_with_body_factory.png

個々のセルを読み取る

ここでは、ロボットは単一の値のみを含むフィールドの個々のセルを読み取ります。これらのフィールドは静的です(行数は固定で1つです)。

これらのステップは非常に繰り返しが多いので、invoiceNumber変数のステップのみを再現します。さらに練習したい場合は、他の変数、つまりcompanyNameshippingAddressshippingTelephoneNumberdueDateについても同様に行うことを強くお勧めします。

Recorderでセルを選択するか、OpenRPA.Utilitiesツールボックス内にあるReadCellアクティビティをForEachWithBodyFactory<>アクティビティ内のシーケンスにドラッグしてください。

Recorderが使用されていない場合、ユーザーはこのアクティビティを使用するために、さらにいくつかのステップを踏む必要があります。まず、プロパティ・ボックス内のFilenameパラメータをfilePath変数に割り当てて、読み込まれるExcel ファイルを 選択します。Cellパラメータにキャプチャされるセルを入力します。この例では、請求書番号に対応する「H3」です。

ReadCellアクティビティはExcel ファイルから読み込んで、デフォルトでString変数にセルを保存します。ユーザーは、Propertiesタブ内のArgumentTypeパラメータを変更することで、取り込むデータの種類を変更することができます。

この変数はまだ存在しないので、まず作成する必要があります。この変数には必ずSystem.Data.String 型を設定しなければならないことに注意してください。

プロパティタブ内のResult入力欄をクリックし、使用したい変数名を入力するだけです。この場合、invoiceNumberとなります。

ここで、残りの変数についても、上記の手順を繰り返してください。

images/openrpa_workflow_example_read_excel_read_individual_cell.png

ここで集めた値をすべて取り込んで、後でDataTableに保存できるようにするためには、変数Scopeを一番外側のシーケンスに変更する必要があることを忘れないでください。

images/openrpa_workflow_example_read_excel_change_scope.png

備考

プロパティボックスで新しい変数を作成する場合、変数名を入力した後、キャレットを入力フィールドに置いたまま'K'を押すと、OpenRPAはこの新しい変数をアクティビティに必要な正しいタイプで自動的に作成します。

テーブルのセル(”items”)を読み込む

ここでは、ロボットが請求書内の「表」を読み取ります。個々のセルを読み取るのとは異なり、表は通常動的です(行の数は変化する可能性があります)または。これは、開発者が手動で各変数のReadCellアクティビティを追加することを許可するように、単にあまりにも巨大であるセルの特定の範囲を読み取ることができるプログラム的な方法で行われます。

この「テーブル」は「itemsDataTable」という新しいDataTableに格納され、空の列の削除、値の合計やカウントなど、いくつかのロジックも適用される。

Sequenceアクティビティをドラッグして、Items Processing Logicと名付けます。

このシーケンス内で、CreateDataTableアクティビティをドラッグして、itemsDataTableという名前のテーブルを作成します。

このDataTableのヘッダは、{"itemName", "quantity", "rate", "subTotal"}でなければならない。

images/openrpa_workflow_example_read_excel_read_items_processing_logic_create_data_table.png

課題では、0、3、5、7列を使用します。請求書のテンプレートを見てみると、これらはデータを含む列のインデックスになっています。

Read Rangeアクティビティを利用して、テーブルの内容をDataTableに取り込みます。

まず、「Filename」入力フィールドに、アクティビティが読み込むファイルのパスを入力します。

プロパティボックスの中の「セル」フィールドに、取り込みたいセルを入力します。この例では、「A14:H18」です。

images/openrpa_workflow_example_read_excel_range_cells.png

インデックス0357は、現在の行の内部にあるインデックス付きオブジェクト、つまり列を参照します。

プロパティボックスの DataTableフィールドに、保存するDataTableの名前を入力します。今回の場合、このDataTableは itemsです。

プロパティ]ボックスで、[IgnoreEmptyRows]プロパティを見つけ、この値を[True]に設定します。このテーブルにはヘッダーがないので、Use Header RowプロパティをFalseに設定します。これにより、アクティビティはデータの最初の行 (行 14) を読み込むようになります。

images/openrpa_workflow_example_read_excel_items_processing_read_range.png

そして、ForEach DataRowアクティビティでDataTableをループさせることで、Add DataRowアクティビティを使用して、各アイテム情報を「itemsDataTable」にループさせています。

images/openrpa_workflow_example_read_excel_items_processing_for_each_and_add_data_row.png

ここで、小計の値を計算し、その値を合計値に加算するロジックが登場するが、これは最終的なExcel シートで説明される。

System.Decimal 型の新しい変数quantityを宣言します。Assignアクティビティを使用して、その値をquantity + Convert.ToDecimal(row(3).ToString)に割り当てます – これにより、この変数はアイテムの反復ごとにその値を増加させることになります。

System.Decimal 型の新しい変数currentQuantityを宣言します。Assignアクティビティを使用して、その値をConvert.ToDecimal(row(3).ToString)に代入します。

変数currentRateについてもrow(5)を基準値として、上記の手順を実行します。

System.Decimal 型の新しい変数subTotalを宣言します。Assignアクティビティを使用して、その値をcurrentQuantity*currentRateに代入します。

最後に、System.Decimal.Decimal 型の新しい変数dueBalanceを宣言します。Assignアクティビティを使用して、その値をdueBalance + currentQuantity*currentRate に代入します。

ここで集めた値をすべて取り込み、後でDataTableに保存するためには、ユーザは変数のScopeを一番外側のシーケンスに変更しなければならないことを指摘しておく。

images/openrpa_workflow_example_read_excel_items_logic_assign_variables.png

備考

範囲を読み取る」アクティビティでは、「:」というコロン記号で取り込みたい範囲を区切り、その左側のセルを開始セル、右側のセルを終了セルとします。