みなさんこんにちは。
システムエンジニアリングセンターのやまさきあです。
最近、ヨガを始めました!
休日の朝にヨガへ行くと、その後の作業がうまくいって充実感があるんですよね。
業務だけでなく、私生活も効率化しています(笑)
今回は、私生活…ではなく業務を効率化するお話です。
RPAエンジニアのみなさんならご存知でしょうが、業務効率化の対象としてExcelでの操作が挙がることは多くあります。
RPAツールUiPathでは多くのExcelに関するActivityを使用することができるため、とても便利です。
(Activity一覧はこちら)
しかし、その中に使用したいActivityが無く困ったことはありませんか?
この解決策として4つの方法と、その中でもおすすめの方法の手順をご紹介します。
目次
解決方法 | メリット | デメリット |
カスタムアクティビティ | C#で柔軟な処理ができる Activityとして利用することができる (Activityパネルに表示可能、何度も簡単に利用可能) |
作成に時間がかかる (https://www.cresco.co.jp/blog/entry/6714/) プログラミングの知識が必要 |
ライブラリ | 共通機能を作る際に向いている Activityとして利用することができる (Activityパネルに表示可能、何度も簡単に利用可能) |
共通機能ではないちょっとした処理を作るのには不向き (https://studio.uipath.com/lang-ja/docs/about-libraries) |
コードを呼び出し (Invoke Code) Activity |
手順が比較的容易 VB.NETでコードを記述可能 UiPath上でコードを確認可能 |
名前空間へのImportとアセンブリ参照を行う必要がある場合、異なるワークフローで同様の処理を行いたい場合には、作成に少し時間がかかる (ワークフローごとにImportを行う必要がある) |
マクロを実行 (Execute Macro)Activity |
手順が比較的容易 | マクロ独自の操作を実施可能 新規で作成するとマクロファイルが増える コードミスをUiPath上で確認できない |
今回は、Excelにおいて文字色を変えるという処理を行ってみます。
この処理を行うことができるActivityは、UiPathには存在しません(Studio 2018.4.3現在)。
文字色を変える処理を1回しか実施しないと仮定すると、上記の解決方法の中では、
手順が比較的容易で既存のファイルが増えない、 “コードを呼び出し(Invoke Code) Activity” が適していそうです。
Excelでの処理を行う際には、コードを呼び出しActivityを使用する前に、事前準備が必要です。
① 名前空間にCOMコンポーネントへの参照をImportする
アプリケーションからExcelにアクセスするには、Excelが公開するCOMコンポーネントへの参照をワークフローに追加する必要があります。
- 手順
コードを呼び出しActivityを使用するワークフローの「インポート」パネルからMicrosoft.Office.Interop.Excelを検索し、選択します。
② アセンブリ参照を読み込む
xaml ファイルを直接変更することは、UiPath では推奨されていません。
しかし、現状ではこの方法でしかアセンブリ参照をロードできません。(HOWTO: Use MS Office COM interop with UiPath)
- 手順
コードを呼び出しActivityを使用するワークフロー(Xamlファイル)をテキストエディター(メモ帳等)で開いて以下の行を追加し、保存しましょう。
<AssemblyReference>Microsoft.Office.Interop.Excel</AssemblyReference>
Assembly Referenceが記載されている箇所を検索し、一番後ろに追加すると体裁が整います
これで、事前準備は完了です。
いよいよ、コードを呼び出しActivityを使ってコードを書いていきます。手順は以下の通りです。
① アクティビティパネルにInvoke Codeアクティビティを追加する
② Invoke Codeの”コードを編集”をクリックする
③ コードを書く(言語は、VB.Netを用います)
以下はコードの参考例です。今回は、”B3″セルの文字色を赤色に変えてみましょう。
‘ Excelアプリケーションを起動します。
Dim xlApp As Application = New Application()
‘ 対象のExcelを開きます。ファイルパスは適宜変更してください。
Dim xlWorkbook As Workbook = xlApp.Workbooks.Open(“C:\Users\MyPC\Desktop\TestExcel.xlsx”)
‘ 対象のシートを開きます。このとき、DirectCast を使ってWorkbook(Object型)をWorkSheetへと明示的に変換します。シート名は適宜変更してください。
Dim xlSheet As Worksheet = DirectCast(xlWorkbook.Sheets(“Sheet1”), Worksheet)
‘ 文字を変えたいセルを指定します。
Dim xlCells As Range = xlSheet.Range(”B3”)
‘ セルの文字色を設定します。
xlCells.font.Color = Color.Red
‘ ワークブックを保存します
xlWorkbook.Save()
‘ ワークブックを閉じます
xlWorkbook.Close()
‘ Excelアプリケーションを終了します
xlApp.Quit()
④ コードを書き終えたら“OK”を押す
コードにミスが存在する場合は、青いビックリマークが付きますので、コードを修正してください。
もし、コードを見直しても修正する箇所が見当たらない場合は、UiPathを再起動してワークフローを開き直してみてください。
また、
「‘Microsoft.Office.Interop.Excel.Application’ に一致する相互運用機能型が見つかりません。
アセンブリ参照が不足していないかどうかを確認してください。」
というエラーが出る場合があります。
これは、おそらくUiPathのバグであると考えられます(Studio 2018.4.3で再現できました)。
この対策として、コードを呼び出しActivityの上部に”代入Activity”を追加し、何かしらの変数に値を代入してください。
(必要な変数でなくとも構いません)
ここまでで作業は完了です。実行してみましょう!
見事、文字の色を変えることができました!
おめでとうございます!
これであなたもコードを呼び出しActivityマスターです!
今回は、Excelで処理を行うコードを記述しましたが、他にも使い道があります。
例えば、代入(Assign)アクティビティで使用しようとするとエラーになってしまうような、
値を返さない関数を呼び出す処理を簡単に記載することができます。
例:ロボットのカレントディレクトリを設定する(Directory.SetCurrentDirectory)
代入Activityではエラーになってしまうコードも、
コードを呼び出しActivityでは記述することができます。
“引数を編集”で、使いたい値や変数を指定することもできるので、もし可能であれば使ってみてください。
NameがInvoke Code上での変数名、Valueが指定したい値や変数です。
以上、「コードを呼び出しActivityマスターへの道」として、やまさきあ がお送りしました!
少しでもみなさまの手助けになれば幸いです。