UiPathでExcelを操作する(活用編: 名前を付けて保存する)

#UiPathでExcelを自由に操作する(活用編: 名前を付けて保存する)

## 概要
前回の基本編でWorkbookの取得方法をご紹介しました。
https://qiita.com/takusonix/items/ebb71c7b2674a116c33a

この記事では取得したWorkbookを活用して、Excelの名前を付けて保存するカスタムアクティビティの作り方をご紹介します。
※この記事は、名前を付けて保存する実装のみを記載しおり、不完全版です。
業務で使用する場合、下記の完成版の実装をご利用ください。
https://qiita.com/takusonix/items/d8070b61c06900d75c92

## お約束事項（免責事項）
- この記事は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を開く
新しいExcelを開いてください。

### 2.マクロの記録を実行する
開発タブからマクロの記録を選択します。
マクロ名はデフォルトのままで構いません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/84644c53-5e05-0de7-6fe9-d6d2ba9b7aef.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/5d719240-2d27-b6bd-4fba-87b1dabd7cab.png)

### 3.名前を付けて保存する
ファイルを選択し、名前を付けて保存から参照を教えて、適当な場所に保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/c3374d6c-1f93-b894-ed07-28d66498999c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/5235f494-2f62-ebea-d8ae-4feb94702f80.png)

保存時に表示される確認メッセージは、「はい」を選択して回避する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/270c49b9-3d49-ae05-ab0b-a5dce1e5c1ab.png)

### 4. マクロを停止する
開発タブから、停止を押してマクロの記録を停止します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/7913890f-4381-dcb6-929a-4851a1640d9d.png)

### 5.記録したマクロを確認する
同じ開発タブから、マクロボタンを押し、記録したマクロを編集ボタンを押して内容を確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/ef29a0ef-3679-5538-762c-5b3e9648adf9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/abc78c5f-2542-ffe9-7b34-6fad58da21c7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/208c5f97-795b-7cd5-62bf-bc65f975b8a1.png)

### 6.実装内容の確認
以下が、実装内容になります。
ここのActiveWorkbookが前回の記事の基礎編でご消化したWorkbookに置き換えるだけです。

```VB
    ActiveWorkbook.SaveAs Filename:="C:\Users\stell\Documents\Sample\Book1.xlsx" _
        , FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
```


## 手順
### 1.プロジェクトを開く
基礎編で使用したVisual Studioでクラスプロジェクトを開きます。

### 2.クラスファイルを追加する
SaveAs.csのクラスファイルを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/313e4199-d909-9d0d-048d-e427f955063f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/672f23fd-784f-9466-7ff6-10702849d834.png)

### 3.参照の追加
基礎編で追加済みの場合は不要です。

1. UiPath公式のガイド通り、「System.Activities」と「System.ComponentModel.Composition」を追加します。
2. 次に参照の追加で「COM」を選択し、「Microsoft.Excel XX Object Library」を選択します。  
※Officeがインストールされてない場合、表示されません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/cd705298-db93-ee22-6c18-e6d2dc8bd89f.png)

### 4.実装
コードは下記のとおりです。
ビルドの仕方、Nuget Packageの作り方は割愛します。（笑）

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

namespace UiPathCustomLibrary
{
    public class SaveAs : CodeActivity
    {
        [Category("Input")]
        [RequiredArgument]
        public InArgument<Object> WorkbookApplication { get; set; }
        [Category("Input")]
        public InArgument<Object> FileName { get; set; }
        protected override void Execute(CodeActivityContext context)
        {
            object workbookapp = WorkbookApplication.Get(context);
            Workbook workbook = workbookapp.GetType().GetProperty("CurrentWorkbook").GetValue(workbookapp) as Workbook;

            workbook.SaveAs(Filename: FileName.Get(context), FileFormat: XlFileFormat.xlOpenXMLWorkbook, CreateBackup: false);
        }
    }
}

```

SaveAsの実装途中で、引数についてヒントも確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/ed8eb11b-1b9e-629d-6899-c71d4b5a5f96.png)

### 5.実行確認
Nuget Package Explorerで作成したライブラリをUiPath Studioでインストールした後、早速使ってみます。
「c:\tmp\Sample2.xlsx」として名前を付けて保存します。
※ 保存先は絶対パスで指定してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/bb80d433-6439-310b-b934-8d0750c3c112.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658425/2a60d6ce-b4f6-bbfd-c92b-f975552e55cb.png)

## おまけ
### （失敗談）ファイル名だけ指定して実行する
カスタムライブラリで実行すると、作業ディレクトリ(Environment.CurrentDirectory）がロボットプロジェクトの場所ではなく、
カスタムライブラリーのプロジェクトフォルダに移ります。
そのため、ファイル名だけ指定して実行すると、想定外の場所に出力されます。