UiPathでExcelを操作する（活用編 : 最終行を取得する)

#UiPathでExcelを操作する(活用編: 最終行を取得する)

## 概要
UiPathでExcelのセルから、最終行を取得する方法をご紹介します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/8b122555-f115-d885-b611-7e0364ee9239.png)


## お約束事項（免責事項）
- この記事は2020年6月時点の情報を基に作成しております。
- 記事の内容は私個人の見解であり、所属する組織の公式見解ではありません。

## スキル
この記事には、C#によるカスタムアクティビティの開発が含まれます。
カスタムアクティビティの開発方法は、UiPath公式のドキュメントを参照ください。
（本記事では最低限のみ記載します。）
https://docs.uipath.com/activities/lang-ja/docs/creating-a-custom-activity

## 必要なソフトウェア
- Visual Studio
- Nuget または Nuget Package Explorer
- Microsoft Office

## 実装内容の確認
マクロの記録を活用し、実装内容を確認します。
### 1. Excelデータを用意する
今回は、4x4の以下のデータを用意しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/5aa9d00d-2396-4b52-0f8e-a1fd889506f1.png)

### 2. マクロの記録を開始する
開発タブから、マクロの記録を選択します。
マクロ名はデフォルトのまま進めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/caa32754-7624-fe19-873b-61fb837c9059.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/0e572d67-f2fc-88da-43ec-2f7723ba4430.png)

### 3. 開始セルを選択する
最終行を特定する前に、開始セルを選択する必要があります。
この記事では、1Aのデータが設定されている、C3のセルを選択しています。


### 4. [Ctrl] + [↓]で最終行に移動する
Ctrlキーと↓キーを押すと、最終行の4Aのセルに移動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/7fe18dd6-d3a0-6fd1-0f84-3f27e6ac05f7.png)

### 5.マクロ内容の確認
開発タブから記録の停止を選択して、実装内容を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/96813af6-5906-2e61-f4e9-71e43be5d98c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/f0dc1574-ddc3-7582-e696-e5d364bbe1d5.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/0cb23f31-82e0-7612-3ae8-ac72d58d5966.png)


## 実装
マクロの内容をもとに、実装します。

```C#
using Microsoft.Office.Interop.Excel;
using System;
using System.Activities;
using System.ComponentModel;

namespace UiPathCustomLibrary
{
    public class GetEndRow : CodeActivity
    {
        [Category("Input")]
        [RequiredArgument]
        public InArgument<Object> WorkbookApplication { get; set; }
        [Category("Input")]
        [RequiredArgument]
        public InArgument<String> SheetName{ get; set; }
        [Category("Input")]
        [RequiredArgument]
        public InArgument<String> Range { get; set; }
        [Category("Output")]
        public OutArgument<int> EndRowNum{ get; set; }
        protected override void Execute(CodeActivityContext context)
        {
            // 引数(InArgument)より、WorkbookApplicationのオブジェクトを取得する
            // WorkbookApplicationの属性に必須（RequireArgument）を指定しているため、workbookappのnullチェックは不要
            object workbookapp = WorkbookApplication.Get(context);

            // WorkbookApplicationから、Microsoft.Office.Interop.Excel.Workbook型として（キャストして）、CurrentWorkbookを読み込む
            Workbook workbook = workbookapp.GetType().GetProperty("CurrentWorkbook").GetValue(workbookapp) as Workbook;

            // 対象のシート（初期値:null)
            Worksheet worksheet = null;

            // ワークシート一覧からシート名が一致するシートを取得する
            foreach (Worksheet ws in workbook.Worksheets)
            {
                if (ws.Name == SheetName.Get(context))
                {
                    worksheet = ws;
                    worksheet.Activate();
                    break;
                }
            }
            // 対象のシートが初期値のままの場合、例外を発生して終了する
            if (worksheet == null)
            {
                throw new ArgumentException("指定されたシート名が存在しません");
            }

            // 指定されたRangeを選択する
            // マクロの("C3")と同じ
            Range range = worksheet.Range[Range.Get(context)];

            // セルを選択する
            range.Select();

            // 選択したセルから下方向に、最終行の行数を取得する
            int endRowNum = range.End[XlDirection.xlDown].Row;

            // 最終行を返り値に設定する
            EndRowNum.Set(context, endRowNum);
        }
    }
}

```


## 実行確認
ExcelApplicationScopeでは”Sample.xlsx"ファイルを指定し、
Nuget Package Explorerで作成したライブラリをUiPath Studioでインストールした後、早速使ってみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/9391f18f-ee3a-4213-051e-e9a35319a55a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/fa42d2d9-b68e-6553-a8bf-78acca8e007d.png)