Upgrade to Pro — share decks privately, control downloads, hide ads and more …

210727 Excel系アクティビティで出来る事・出来ない事 はなっちさん

Avatar for comucal comucal
July 27, 2021

210727 Excel系アクティビティで出来る事・出来ない事 はなっちさん

Avatar for comucal

comucal

July 27, 2021
Tweet

More Decks by comucal

Other Decks in Technology

Transcript

  1. はなっち!とは…  2019年10月 UiPath Japan MVP 2019 認定  2020年10月

    UiPath Japan MVP 2020 認定  2020年11月 定年退職  同 年 同 月 FUJITSU UT社と契約  お客様先でRPAサポート&開発  Twitter:hjmkzk  Qiita:@HANACCHI  FaceBook:hajime.kozaki
  2. こんな問題にぶち当たった ① 業務担当者と仕様検討の際、対象とするシート名は固定名とするとした。 ② 業務担当者のところにメールされてくるEXCELブックを対象に処理したと こと、以下の問題が発生! a. シート名がない!エラー b. シート名があるが、転記内容が違う

    ③ 故障となったファイルを共有していただいたら、以下の事が分かった。 a. 書き方サンプルをコピーし、仕様として決められたシート名に変更し ていなかった b. 書き方サンプルをコピーし、仕様として決められたシート名に変更し たのち、それを非表示にしてしまい、慌てて書き方サンプルに内容を 記載していた ⇒標準アクティビティに、使えそうなアクティビティがない!
  3. 自分で作るVBAの、表示シートの一覧を取得 L1:エントリメソッドの定義。括弧の中には、 最大30個の引数が定義でき、Functionの場合は、戻り値を定義できる。 L2:エントリメソッド内で使用する変数の定義。なくてもよいが、合った方がよい L3:戻り値の初期化 L4:ActiveSheetの親(Workbook)のSheetsの件数分繰り返す L5:シート表示モードがxlSheetVisible(-1)なら… L6:戻り値に、タブと、シート名を連結する L8:繰り返しの終点 L9:

    Mid関数を使用し、最初のタブを除去する L10:エントリメソッドの出口 Public Function VisibleSheetName() Dim ix As Integer VisibleSheetName = "" For ix = 1 To ActiveSheet.Parent.Sheets.Count If ActiveSheet.Parent.Sheets(ix).Visible = -1 Then VisibleSheetName = VisibleSheetName & vbTab & ActiveSheet.Parent.Sheets(ix).Name End If Next ix VisibleSheetName = Mid(VisibleSheetName, 2) End Function 1 2 3 4 5 6 7 8 9 10 InvokeVBA.bas
  4. Public Function intを返します() As Integer intを返します = -1 End Function

    Functionの戻り値の実行例 Public Function Dateを返します() As Date Dateを返します = DateSerial(1960, 11, 11) + TimeSerial(1, 2, 3) End Function Public Function 文字列配列を返します() As String() Dim WK() As String ReDim WK(2) WK(0) = "A" WK(1) = "B" WK(2) = "C" 文字列配列を返します = WK End Function CType(Object型, Int16) CType(Object型, DateTime)
  5. Public Function VisibleSheetName() Dim ix As Integer VisibleSheetName = ""

    For ix = 1 To ActiveSheet.Parent.Sheets.Count If ActiveSheet.Parent.Sheets(ix).Visible = -1 Then VisibleSheetName = VisibleSheetName & vbTab & ActiveSheet.Parent.Sheets(ix).Name End If Next ix VisibleSheetName = Mid(VisibleSheetName, 2) End Function 他のロボットでも使いやすくしてみよう! VBAの呼び出し.ToString.split(ControlChars.Tab) • [VBAの呼び出し]の戻り値(Object型)を、 • .ToStringして文字列変換し、 • tabコードで.Splitし、 • 配列化する VBAファイルを展開してもよいが、 • VBAファイルが書き換えられてしまう • 戻り値.ToString.split(ControlChars.Tab)をロボ側でやらねばならない手間 ライブラリ機能で実装してみよう!
  6. ライブラリ機能で実装してみよう! 前提 • 「VBA の呼び出し」アクティビティは、 「EXCEL アプリケーションスコープ」の配下に配置しなければならない • ライブラリ機能は、呼出元のMain以外のアクティビティとして挙動する。 呼出元のMain内の「EXCEL

    アプリケーションスコープ」で開いたEXCELを、 対象にしなければならない! どのようにするのか? ⇒ 「出力」の「パラメタ」に変数を設定し、それを持ちまわる。 ⇒持ちまわる際には、「既存のブックを使用」に設定する 更に、オプションは、すべてチェックオフにする(多分)
  7. 21.6.0-beta.4514+Branch.release-v21.6.0.Sha.57f15d2b37925eaab372a335a19cfdb1e3e4ce40 ライブラリ は正常にパブリッシュされました。 名前: HANACCHI.EXCEL.ACTIVITIES バージョン: 1.0.1 パブリッシュ先: [C:¥Users¥xxx¥Documents¥UiPath](file:///C:/Users/xxx/Documents/UiPath) lib/net45¥HANACCHI.EXCEL.ACTIVITIES.dll

    lib/net45¥HANACCHI.EXCEL.ACTIVITIES_Expressions_59961323.dll lib/net45¥HANACCHI.EXCEL.ACTIVITIES_Expressions_65311315.dll lib/net45¥InvokeVBA.bas lib/net45¥project.json lib/net45¥.tmh¥config.json lib/net45¥.settings¥Design¥settings-afad0842.json lib/net45¥.settings¥Release¥settings-1a5b880a.json lib/net45¥.settings¥Release¥settings-5190454b.json lib/net45¥.settings¥Release¥settings-590bb27b.json lib/net45¥.settings¥Release¥settings-9e9290da.json lib/net45¥.settings¥Release¥settings-a1b2dac1.json lib/net45¥.settings¥Release¥settings-afad0842.json PUBLISH成功!
  8. 依存関係前 { "name": "シート名の一覧を取得", "description": "VBA呼出し", "main": "Main.xaml", "dependencies": {

    "UiPath.Excel.Activities": "[2.5.1]", "UiPath.Mail.Activities": "[1.3.0]", "UiPath.System.Activities": "[18.4.2]", "UiPath.UIAutomation.Activities": "[18.4.4]", "UiPathTeam.Excel.Activities": "[1.1.2]" }, "schemaVersion": "4.0", "studioVersion": "21.6.0.0", "projectVersion": "1.0.0.0", 依存関係後 { "name": "シート名の一覧を取得", "description": "VBA呼出し", "main": "Main.xaml", "dependencies": { "HANACCHI.EXCEL.ACTIVITIES": "[1.0.1]", "UiPath.Excel.Activities": "[2.11.0-preview]", "UiPath.Mail.Activities": "[1.11.0-preview]", "UiPath.System.Activities": "[21.6.1-preview]", "UiPath.UIAutomation.Activities": "[21.6.1-preview]", "UiPathTeam.Excel.Activities": "[1.1.2]" }, "schemaVersion": "4.0", "studioVersion": "21.6.0.0", "projectVersion": "1.0.0.0", カスタムアクティビティ…インストール中に! 略 略 project.json