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


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

概要

UiPathでExcelのセルから、最終行を取得する方法をご紹介します。

お約束事項(免責事項)

  • この記事は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の以下のデータを用意しました。

2. マクロの記録を開始する

開発タブから、マクロの記録を選択します。
マクロ名はデフォルトのまま進めます。

3. 開始セルを選択する

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

4. [Ctrl] + [↓]で最終行に移動する

Ctrlキーと↓キーを押すと、最終行の4Aのセルに移動します。

5.マクロ内容の確認

開発タブから記録の停止を選択して、実装内容を確認します。

実装

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

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でインストールした後、早速使ってみます。