UiPathの個人的備忘録2

過去の個人的備忘録は↓コチラに。（※見なくても特に支障はないです。）
https://qiita.com/narinari75/items/3a8c9861c5d02cb01b8a

#1.Messageboxを吹き出し形にする
「Callout」という、任意の場所に吹き出し型のMessageBoxを出現させるアクティビティがある。
さらにタイマー機能も搭載されており、「○秒後に自動で閉じる」という設定も可能。
![ui1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1401870/dda44db2-687f-a55c-4a88-7e7125d076e2.jpeg)

#2.OpenApplicationで一気飛び
例えばエクスプローラーを起動させる時、「OpenApplication」のプロパティ内の「Arguments」に、フォルダパスを入力して実行すると、最初からそのパスに居る状態でエクスプローラーが開く。
![ui2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1401870/bf8f7703-217d-7dd9-14b2-cf661d03630a.jpeg)
また、Argumentsにファイルパスを入力すれば実行時に開くため、ワードやパワポ等を開きたい時にも使える。

#3.StrConv構文による文字の変換
StrConv構文は、文字をひらがな・カタカナ・半角・全角などに変換する事ができる。

●全角文字→半角文字
【StrConv(全角文字, Microsoft.VisualBasic.VbStrConv.Narrow,&H411)】

●半角文字→全角文字
【StrConv(半角文字, Microsoft.VisualBasic.VbStrConv.Wide,&H411)】

●カタカナ→ひらがな
【StrConv(全角カナ, Microsoft.VisualBasic.VbStrConv.Hiragana,&H411)】

●各単語の先頭文字を大文字に変換
【StrConv(英文字, Microsoft.VisualBasic.VbStrConv.ProperCase,&H411)】

●小文字→大文字
【StrConv(小文字, Microsoft.VisualBasic.VbStrConv.Uppercase,&H411)】

#4.任意の桁数に変換
桁数変換の構文は、
【文字型.PadLeft(設定する文字数,"左詰めで書きたい一文字"c)】

例えば「1→0001」に変換させたい場合は
【"1".PadLeft(4,"0"c)】(※「c」は決まり文句のようなもので、これを記載しないとエラーになる)

また、桁区切りのカンマを含めた文字列にする場合は
【数値型.ToString("#,###”)】
　例：1234567.ToString(“#,###”) → 1,234,567

#5.Split構文で文字を配列にする
Split構文を使うと、1つの文字列型を配列型に変換することができる。

例えば「千葉・滋賀・佐賀」という文字を「・」で区切りたい場合は
【”千葉・滋賀・佐賀”.Split(“・”c)】　→　{“千葉”,”滋賀”,”佐賀”}
index指定による要素取得も可能。
【”千葉・滋賀・佐賀”.Split(“・”c)(0)】　→　“千葉”

また、メモ帳を読み込んだ後等で、改行ごとに文字を分けたい場合は
【変数.Split({vbcrlf,environment.NewLine},StringSplitOptions.none)】

さらに、区切り文字を複数指定する事も可能。
例えば「①A②B③C」という文字を、「②」と「③」で区切りたい場合は
【”①A②B③C”.Split({“②”,“③"},StringSplitOptions.none)】　→ {"①A ", “B", “C”}

#6.日付と関連する構文
・Datetime.Parse(“文字列”)
　→文字列をDatetime型に変換することができる。

・IsDate(“文字列”)
　→True(=その文字は日付型に変換可能)
　→False(=その文字は日付型に変換不可)

・Date.Parse(和暦, New System.Globalization.CultureInfo("ja-JP"))
　→和暦を西暦に変換することができる。

・Math.Abs(CType(DateDiff("d",日付①,日付②),Integer))
　→日付①と日付②の差分日付を算出する。

・Assignアクティビティにて
　左辺：System.Threading.Thread.CurrentThread.CurrentCulture
　右辺：New System.Globalization.CultureInfo("ja-JP")
　　→曜日を英語表記から日本語表記に変換する。

#7.データテーブル内の特定行を削除する
 例えば、下図のデータテーブルから「名前：★」の行を削除してからoutputしたい場合…
![ui2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1401870/1755c1a7-860b-f684-b91a-0dba4016ad33.jpeg)
ForEachRowで削除しようとすると、エラーが発生します。
![ui3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1401870/c5c78754-afd9-9111-8a97-7542a5658dc1.jpeg)

そこで、ForEachを使って下記のように設定すれば、行の削除が出来ます。
![ui4.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1401870/834c6bb6-b14c-e6fd-30f6-d1fac49bef02.jpeg)

#8.104万行以上のデータを…
エクセルの最大行数は1048575行となっており、仮にそれ以上のデータが含まれていたとしても、画面上には表示されません。

では、そんな大容量なデータをUiPathは読み込めるのか？
答えは「ReadCSVならOK、ReadRangeならNG」です。

例えば120万行のデータがあるCSVファイルを読み込み、それをRows.Countすると
ReadCSV→1200000
ReadRange→1048575
という結果になります。

#9.TooLargeエラー
「よし、ワークフロー完成したぞ！それじゃあパブリッシュ～」と思い、パブリッシュボタンを押すと…
![TooLargeエラー画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1401870/a8349ceb-8b32-d958-1f35-35ead7d00d60.png)

「Too Large」エラーが発生！
え、でもMain.xamlはたったの126KBだよ？

…はい、実は
「パブリッシュファイルのサイズ＝Main.xamlを含めた、対象ワークフローで使用する全ファイルの容量」
となっています。

したがって、上記のTooLargeは「Main.xamlに対して」ではなく、
「Main.xamlを含むフォルダに対して」のエラーとなっています。

というわけで、画像内にある120071KBのデカいデータをフォルダ内から削除してあげれば解決します！

#10.フィルタ後のデータが…
DataTableに対して、FilterDataTableを使ってフィルタリングする時、「フィルタリングをした後にデータがあるか？」と確認するかと思います。
![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1401870/7db26d11-5493-fb02-2e04-1039e5dcfc10.jpeg)

では、「フィルタリングをする前にデータがあるか？」の確認をしたい時…
「.AsEnumerable.Any」という構文が使えます。
![キャプチaャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1401870/48cbdfc1-fde3-a714-3ab3-296ec3404910.jpeg)