RPA体験談【実践編:関数やら式やらの雑記帳】

関数やら式やらの雑記帳です。適当にコピーしてお使いください。2021/4/4自分で後から見て混乱したので加筆しました。

最近は、検索ウィンドウも出来たので、ホームページ全体で検索できます。

■■改行

+ vbCrLF +

■■変換の式

文字型に変換:変数.ToString
数値型に変更:Convert.ToInt32(文字列)
※Parseでも使えますが、Nullがある時はConvertの方がいいようです。(後述)

日付型に変更:Convert.ToDateTime(文字列)

※ただし違う型のものがはいっているとエラーになるので、
TryCatchのexceptionで対応するか、
変換する前に判定する必要があります。
・GetTypeメソッドを使うとき (変数).GetType.ToString  →例: System.DateType
・型を直接判定するとき【IsNumeric(数値)/ IsDate(日付)】

■■日付処理

Webの画面では、年/月/日を分けて入力するケースが結構多いです。

私の横着方法では、いったんExcelシートを読み込む場合には、
Excel側で、分割してしまうことも多いです。
可読性とxamlを長くしないためです。
とはいえ、xamlの中で書く必要も多いですから、書き出しておきます。

★8桁の日付を 年/月/日に分ける。

文字型 20210405 数字型 20210405 日付型 2021/04/05
開始年 2021 開始年月日.Substring(0,4) 開始年月日.ToString.Substring(0,4) 開始年月日.ToString(“yyyy”)
開始月 04 開始年月日.Substring(4,2) 開始年月日.ToString.Substring(4,2) 開始年月日.ToString(“MM”)
開始日 05 開始年月日.Substring(6,2) 開始年月日.ToString.Substring(6,2) 開始年月日..ToString(“dd”)

配列型の方がキレイですが、ここは誰でもわかりやすくしています。
※Substringは「0」から始まる点にご注意ください。(後述)
(2022/11/9追記)
開始月、開始日の カッコ内数値を間違えていたので訂正しました。上に「0」から始まる、と書いているのに…(5,2)(7,2)と書いていました。正しくは(4,2)(6,2)です。

★今日の日付を文字型にする

NowDate = Now.Tostring(“yyyy/MM/dd”)
NowYear = Now.ToString(“yyyy”)
NowMonth = Now.ToString(“MM”)
NowDay = Now.ToString(“dd”)

★年度表示(4-3月を同年度とする場合)

Nendo = Now.ToString(“yyyy”)
IntMonth = Integer.Parse(Now.ToString(“MM”))

○1-3月は1年前に
If InteMonth<=3
Nend =(Integer.Parse(Nendo)-1).toString
End If

★月初1日
FirstDate = Now.ToString(“yyyy/MM/01”)

★日付型に変換
DateFirstDate = Convert.ToDatetime(FirstDate)
DateFirstDate = Datetime.Parse(FirstDate)

★1ヶ月前
PreviousMonthDate = Now.AddMonths(-1)

★1ヶ月前月末
PreviousMonthEndofMonth = FirstDate1.AddDays(-1)

★NowとTodayの違いについて
ちなみに、私はNowを使う事が殆どでしたが、
他にTodayというのもあり、改めて調べるとこんな違いがあるらしいです。
●DateTime.Now プロパティ
コンピューター上の現在の日時を現地時刻で表した DateTime オブジェクトを取得します。
●DateTime.Today プロパティ
現在の日付を取得します。(ただし、時刻部分は 00:00:00)

つまり単純に日にちのみという時は、Todayが良いらしいです。
勉強になります。
こんな使い分けが考えられます。
・Today:更新日を書き込んで、「本日更新分を抽出」
・Now:ファイルをダウンロードした時のファイル名に年月日時刻をつける

 

■■ParseとConvertの違い

用例を調べると、変換の際に「Integer.Parse(str)」と「Convert.ToInt32(str)」の2種類があります。
これも改めて調べると、こんな違いがあるらしいです。
Integer.ParseはNullを渡すとエラーになります。
Convert.ToInt32はNullを渡しても例外が発生しません。 (0が返ってきます。)
なお、数値変換は、CInt(str)でもイケます。この場合もNullは0を返します。

例 C=Null
Integer.Parse(C) →エラー
Convert.ToInt32(C)→0を返す

なお、Int32.Parse(str)、Integer.Parse(str)、どちらでも動作し、
vb.netの概念では同じらしいです。
javaでは「プリミティブ型」「クラス型」と型が異なるため、時に挙動が異なるようですが、UiPathでは、あまり意識しなくて良いと思います。

■■ファイルやフォルダ関連

★保存
Path.Combine フォルダ名とファイル名を結合して絶対パスを作成する
Path.GetFileNameWithouExtension 拡張子なしのファイル名
Path.GetExtension 拡張子

★ファイル名に 日付時刻yyyymmddhhmmssをつけて保存する
Path.Combine(SaveFolderName,Path.GetFileNameWithouExtension(fileName)+ “_” + Datetime.Now.ToString(“yyyyMMddHHmmss”) + Path.GetExtension(fileName))

★ファイル名の頭にRPAをつけて、かつ最後に yyyymmddhhmmssをつけて保存する
Path.Combine(SaveFolderName,”RPA_” + Path.GetFileNameWithouExtension(fileName)+ “_” + Datetime.Now.ToString(“yyyyMMddHHmmss”) + Path.GetExtension(fileName))

→例 C:\sample\RPA_Salary20191031101501.xlsx

★日付を付けないときは
Path.Combine(SaveFolderName,fileName)

★その前にフォルダの存在を確かめる

★フォルダとファイルの存在を確かめる
ファイルの存在チェック( True / False)
System.IO.File.Exists(“C:\TEST\Hoge.txt”)

フォルダの存在チェック( True / False)
System.IO.Directory.Exists(“C:\TEST”)

※Directoryを作るのは、CreateDirectoryアクティビティで出来ます。

★フォルダ内のファイル名を取得する
FileList = Directory.GetFiles(FolderName)
★フォルダ内の特定ファイル名を取得する
FileList =Directory.GetFiles(FolderName,filename)

FileListは、「List/String型データ」)
FileList.Length<>0 で存在の判定も出来る。

■■Substring と Instr

★Sustring
ある文字列から、指定文字数分を抽出する
ExcelやAccessでいうところの Mid関数
Substringメソッドでは先頭の文字を0文字目と数えることに注意。

Substring と Midを比較すると、
速度面からSubstringを使った方がいいみたいです。

“あいう”.Substring(0,2) →”あい”
“あいう”.Substring(1,2) →”いう”

★InStr
ExcelのFind、AccessのInStr

★Substring と InStrとの組み合わせ


A = “日本 一郎/総務部”
Keta =Instr(A,”/”)
Len = Length.A
A.SubString(Keta,Len-Keta)
つまりこの場合は、A.SubString(6,3)
※0から始まるので、こうなります。
Midなら mid(A,Keta+1,Len-Keta)になりますが。

本当は、この場合は、配列で切り分けた方が良いです。

★配列の方法
ArrayName = A.Split(“/”c)
UserName = ArrayName(0)
UserSyozoku = ArrayName(1)
…これで /で配列毎に分かれて、日本 一郎、総務部に変数に出力できます。
※ちなみに配列の結合は Joinを使います。

■■Replace と Contain

★Replace

良く使うのが
Body.Replace(controlchars.If,controlchars.crlf) Excelの改行フラグを変換する
Body.Replace(” “,””) スペースを無くす

Excelの SUBSTITUTE関数と同じイメージですね。

★Contain
○○.Contain(“△△”)


「単純に△△を含む」でも使うと思いますが、
私は、以下の時に重宝しました。
InputDialogで選択肢を作る時に(出力はResult)
{“1.ダウンロードと予約”,”2.予約”,”3.ダウンロードのみ”}
と作った時に、
Result.Contain(“ダウンロード”)
Result.Contain(“予約”)
として処理を判定する等で使う。

■■その他

★Rows
データテーブル(DT)の1行目(Rows(0))のデータからの、項目の呼び出し
DT.Rows(0)(“フォルダ名”).ToString
↑列の見出し名 配列でもOK DT.Rows(0)(2).ToString

★Null判定
String.IsNullorEmpty()  NullならTrue
Not String.IsNullorEmpty() NullでなければTrue

■■時間設定

(単位がごちゃごちゃでホントわかりにくい)

・TimeOut default 30,000ms(30秒)
・Delay のPropertiesのDurationは、00:00:01で1秒
・Click等 の Propertiesのデフォルト
・終了後待ち時間(Delay After):300
・開始前待ち時間(Delay Before):200
※単位はミリ秒(1000分の1秒)つまり 300は0.3秒

 

↓日記の目次を作りました。
RPA体験談【目次(主にUiPathについて書いています)】

 

 

 

次へ

前へ