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

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

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

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