UiPath

【UiPath】起動されたオブジェクトはクライアントから切断されました。の対応策

UiPathのExcel操作で以下のエラーに遭遇した方も多いのではないでしょうか?

RemoteException wrapping UiPath.Excel.ExcelException: 起動されたオブジェクトはクライアントから切断されました。 (Exception from HRESULT: 0x80010108 (RPC_E_DISCONNECTED))

連続でExcelを起動したり、処理速度が早すぎると発生するようですが、毎回エラーになるわけではないので対応策が分からない・・・

そんな方向けの記事となります。

対応策

プロジェクト設定で、Excelモダンの「Excelプロセススコープ」の設定を変更します。

既存のプロセスに対するアクションで「実行時の値」「デバッグ時の値」どちらも、

Excelを起動するたびに、既存プロセスは強制終了されるので、エラーが発生しなくなりました。

Delayやプロセスキルだとエラーが解消しなかったので、こちらの方法が私の中ではベストです。

【UiPath】連続するスペースを1つにまとめる方法

BizRobo!の関数で「連続するスペースを1つにまとめる」機能があるので、UiPathで実装する方法を紹介します。

やりたいこと

str = "aaa       iiii   u    eee"

↓連続する空白を1つにまとめる↓

str = "aaa iii u eee"

実装例

正規表現で実装しますので、「一致するパターンを置換」アクティビティで以下を設定します。

パターン ⇒ ” +”

置換後のテキスト ⇒ ” “

連続した半角スペースを1つの半角スペースに置換します。

実行結果

補足

全角スペースも対象の場合の正規表現は以下です。

パターン ⇒ [  ]+

【UiPath】マクロの実行方法(モダン)

モダンデザインでマクロを実行する方法を紹介します。

事前準備

実行するマクロファイルのコードは以下です。

メッセージボックスに「Zawanii」と出力します。

Sub Example1()
    Dim msg As String
    msg = "Zawanii"
    MsgBox msg
End Sub

全体フロー

マクロ実行アクティビティ

モダンデザインでマクロを実行するアクティビティは「スプレッドシートのマクロ実行」です。

元のブック

⇒「Excelファイルを使用」の参照名

マクロ名

⇒実行するマクロ名

実行結果

【UiPath】プロジェクト名の取得方法

プロジェクト名の取得方法を紹介します。

全体フロー

手順①project.jsonを読み込み

「テキスト ファイルを読み込み」でproject.jsonファイルを読み込みます。

プロジェクト名は「Zawanii」です。

手順②json形式に変換

①で読み込んだ変数を「JSONを逆シリアル化」でjson形式に変換します。

手順③プロジェクト名を取得

②で変換したjson形式の変数から「name」を取得します。

手順④出力結果

プロジェクト名が出力されます。

補足

プロジェクトの説明を取得したい場合は「description」を指定します。

studioのバージョン取得は「studioVersion」です。

【UiPath】本番環境で動作しない時に確認すること

開発環境だと問題なく動くのに、本番・運用環境だとエラーになる・・・

このような場合ロボのワークフローではなく、環境周りが主な原因となります。

エラー解消に向け確認すべきポイントを4つ紹介します!

①アクセス権限の付与

本番環境から、対向システム、共有ドライブなどにアクセスできるか確認します。

②アプリのインストール

必要なアプリ、拡張機能などがインストールされているか確認します。

また設定も開発環境と揃えます。

(例)Chromeのダウンロード設定が開発環境と同じか

③解像度を合わせる

開発環境と本番環境の解像度を同じにしましょう。

解像度が異なると、画像認識アクティビティを利用している場合はエラーになる確率が上がります。

④PCのスペックを同じにする

CPU、メモリなどのスペック差があることで、処理速度の違いによるエラーなどが発生することがあります。

スペックを揃えるのが難しい場合は、処理前後の待機時間を見直しましょう。

【UiPath】対応OSの確認方法

project.jsonファイルで確認することができます!

確認方法

project.jsonファイルをメモ帳で開き、”targetFramework”の値が対応OSとなります。

下記の画像はWindowsプロジェクトです。

クロスプラットフォームは「Portable」、レガシーは「Legacy」と表示されます。

【UiPath】特定の文字列と文字列の間を抽出する

特定の文字列と文字列の間の文字列を、正規表現を使用しないで抽出する方法を紹介します。

例①として、”2018年9月2日”という文字列から、”月”と”日”の間の”2“だけを取得します。

例②として、”ABCDEFGHIJKLMN”いう文字列から、”C”と”L”の間の”DEFGHIJK“だけを取得します。

正規表現を使用した方法は以下の記事で紹介しています。(以下の記事の方がおすすめ)

【UiPath】特定の文字列と文字列の間を抽出(正規表現)

①特定の文字列と文字列の間を抽出する

変数strに文字列”2018年9月2日”を代入します。

処理を2回に分けます。

①先頭から”月”までの文字”2018年9月”を削除します

str.Remove(0,str.IndexOf(“月”) + 1)

Remove関数を使用し、先頭(0)から”月の”文字位置(6文字目) + “月”自体の文字数(1文字)を削除します。

結果先頭から7文字削除され、”2日”だけになります。

②”日”以降の文字を削除します

str.Remove(str.IndexOf(“日”))

Remove関数を使用し、”日”の文字位置(1文字目)以降を削除します。

※文字列の先頭は0文字目 2⇒0文字目 日⇒1文字目

結果1文字目以降が削除され、”月”と”日”の間の”2″だけ取得できました。

②特定の文字列と文字列の間を抽出する

変数strに文字列”ABCDEFGHIJKLMN”を代入します。

処理を2回に分けます。

①先頭から”C”までの文字”ABC”を削除します

str.Remove(0,str.IndexOf(“C”) + 1)

Remove関数を使用し、先頭(0)から”Cの”文字位置(2文字目) + “月”自体の文字数(1文字)を削除します。

結果先頭から3文字削除され、”DEFGHIJKLMN”だけになります。

②”L”以降の文字を削除します

str.Remove(str.IndexOf(“L”))

Remove関数を使用し、”L”の文字位置(8文字目)以降を削除します。

※文字列の先頭は0文字目 

結果8文字目以降が削除され、”C”と”L”の間の”DEFGHIJK”だけ取得できました。

【UiPath】特定の文字列と文字列の間を抽出(正規表現)

特定の文字列と文字列の間の文字列を正規表現で抽出する方法を紹介します。

例①として、”2018年9月2日”という文字列から、””と””の間の”2“だけを取得します。

例②として、”ABCDEFGHIJKLMN”いう文字列から、”C”と”L”の間の”DEFGHIJK“だけを取得します。

どちらも「一致するパターンを探す」アクティビティを使用し、「メッセージボックス」に表示させます。

正規表現を使用しない方法は以下の記事で紹介しています。

【UiPath】特定の文字列と文字列の間を抽出する

①特定の文字列と文字列の間を抽出する

「一致するパターンを探す」のプロパティを設定します。

[検索対象のテキスト]に対象文字列を設定します。

⇒ 2018年9月2日

[パターン]に正規表現の値を設定します。

[結果]に括弧を除いた文字列を格納する変数を設定します。

⇒ result

メッセージボックスに表示するため、文字列に変換します。

実行結果

②特定の文字列と文字列の間を抽出する

「一致するパターンを探す」のプロパティを設定します。

[検索対象のテキスト]に対象文字列を設定します。

⇒ ABCDEFGHIJKLMN

[パターン]に正規表現の値を設定します。

[結果]に括弧を除いた文字列を格納する変数を設定します。

⇒ result

実行結果

【UiPath】環境変数を取得する

環境変数を取得する、「環境変数を取得」アクティビティの使い方を紹介します!

環境変数を設定するだけで、使い方は簡単です。

使用アクティビティ

UiPath.Core.Activities.GetEnvironmentVariable

サンプルフロー

変数「TEST」の値、「testだよー」をメッセージボックスに出力します。

[名前]に環境変数を設定します。

出力値には文字列の変数を設定します。

実行結果

【VB.NET】VB.NET関数一覧(文字列)

文字列操作で使用する、VB.NET関数の一覧をまとめました。

VB.NET関数一覧(文字列)

.NET関数内容
Concat文字列を連結する
Insert文字列を挿入する
Remove文字列を削除する
Replace文字列を置換する
Length文字列の長さを取得する
Equals文字列を比較する
Compare文字列を比較する(大文字小文字区別なし)
ToUpper文字列を大文字に変換する
ToLower文字列を小文字に変換する
Chars文字列から一文字を取り出す
Substring文字列の一部を取り出す
PadLeft指定の文字数になるまで先頭を文字で埋める
PadRight指定の文字数になるまで末尾を文字で埋める
StartsWith先頭の文字列と一致するかどうか判断する
EndsWith末尾の文字列と一致するかどうか判断する
Trim先頭または末尾にある空白の文字を削除する
TrimStart先頭にある指定の文字を削除する
TrimEnd末尾にある指定の文字を削除する
IndexOf先頭から文字を検索する
Split区切り文字で分割して配列に変換する
Join配列を結合して文字列にする
Empty空の文字列を表すフィールドを使用する

Concat(連結)

String.Concat(“abc”,”def”)

結果⇒”abcdef”

Insert(挿入)

“abcdef”.Insert(3,”zzz”)

結果⇒”abczzzdef”

Remove(削除)

“abcdef”.Remove(3,2)

結果⇒”abcf”

Replace(置換)

“abcdef”.Replace(“cd”,”xx”)

結果⇒”abxxef”

Length(文字数)

“abcdef”.Length

結果⇒6

Equals(比較)

“abcdef”.Equals(“abcdef”)

結果⇒True

Compare(大小区別なし比較)

String.Compare(“abcdef”,”ABCDEF”,True)

結果⇒0

※一致だと0を返す

ToUpper(大文字変換)

“abcdef”.ToUpper

結果⇒”ABCDEF”

ToLower(小文字変換)

“ABCDEF”.ToLower

結果⇒”abcdef”

Chars(1文字抽出)

“abcdef”.Chars(4)

結果⇒”e”

Substring(一部抽出)

“abcdef”.Substring(2,3)

結果⇒”cde”

PadLeft(先頭を埋める)

“abcdef”.PadLeft(10,”z”c)

結果⇒”zzzzabcdef”

PadRight(末尾を埋める)

“abcdef”.PadRight(8,”z”c)

結果⇒”abcdefzz”

StartWith(先頭一致)

“abcdef”.StartWith(“abc”)

結果⇒True

EndWith(末尾一致)

“abcdef”.EndWith(“ef”)

結果⇒True

Trim(空白削除)

”       abcdef       “.Trim

結果⇒”abcdef”

TrimStart(先頭空白削除)

”       abcdef       “.TrimStart

結果⇒”abcdef       

TrimEnd(末尾空白削除)

”       abcdef       “.TrimEnd

結果⇒”       abcdef”

IndexOf(位置検索)

“abcdef”.IndexOf(“b”)

結果⇒1

Split(分割)

“abcdef”.Split(“b”c)

結果⇒{a,cdef}

Join(配列結合)

String.Split(“@”,{“abc”,”def”})

結果⇒”abc@def”

Empty(空文字)

String.Empty

結果⇒””