あれ、値が何か違う...?UiPathでExcelのセルを読み込むときに気をつけたいこと
RPAエンジニア 小林
UiPathを使ったExcelの操作は、自動化の中でも特によく行う作業だと思います。 Excelまわりの操作をするアクティビティの代表例として、特定のセルの値を読むRead Cellがあります。 Read Cellアクティビティでは、セルの位置(A1など)を指定してその値を特定の変数に入れるだけなので設定は簡単ですが、注意が必要な点もあります。
まず注意したいのが、読み込みたいセルのExcel側の表示形式とその値を格納する変数の型です。 例えば、Read Cellアクティビティで読み込みたいセルの値が、Excel側では数値として表示されているのに、出力としてString型の変数を指定していると、エラーとなりロボットが止まってしまいます。もちろん、読み込みたいすべてのセルが文字列形式で表示されていることがあらかじめわかっている場合はString型の変数を指定しても問題ありません。しかし、そうでない場合はGenericValue型の変数を使ったほうが良いでしょう。例えば、読み込んだ値を(数値や日付などの表示形式にかかわらず)すべて文字列として扱いたい場合でも、いったんGenericValue型の変数に格納してからObject.ToString()メソッドを使って文字列に変換したほうがエラーは起きにくくなります。
続いて気をつけたいのが、Excelのセルに表示されている見た目とRead Cellアクティビティを使って読み込まれた値が必ずしも一致するとは限らないということです。 例えば「2019/3/25 1:23:45」という値が登録されたセルの表示形式が日付だった場合、表示される情報は日付の部分「2019/3/25」のみです。しかし、このセルを読み込むと、表示されている値とは異なる値「2019/3/25 1:23:45」が変数に入ります。 セルに表示されている値をそのまま取得したいという場合は、Read Cellアクティビティの「表示形式を保持」のチェックをオンにすると、表示のままの値を取得することができます。上記の例で言えば、表示通りの日付情報「2019/3/25」のみが取得されます(このとき、時刻「1:23:45」の部分の情報が失われていることには注意が必要です)。
今回はUiPathでRead Cellアクティビティを使うときの注意点について紹介しました。この注意点はWrite Cellアクティビティについても同様で、書き込みたい値が格納された変数の型だけでなく書き込み先のセルの形式にも気をつける必要があります。これらのアクティビティは、設定が単純な上に頻繁に使うので確認がおろそかになりがちです。どのような値を読み込み(書き込み)たいのか、Excel上ではどう表示されるのかを注意してロボット開発をしていきたいですね。