CSVファイルの項目を"ダブルコーテーション"で囲う
全従業員の勤務データ(Excel)をまとめて新しい勤怠システムに流す、いわば並行稼働中のデータ移行作業にBluePrismを使っていますが、問題が発生したので、その解決方法を備忘録的に書いておきます。
第一回 BluePrism 試作編
全従業員の一年分のExcelを読み込んで有休消化の状況や残業時間、通勤日数、36協定チェック等していくんですが、これがまた大変で…
(今回はここは関係ないので省略w)
コレクションの集計データを入れたら
で書き出します。ここも難しくないので省略
※日本語のFile ManagementのVBO使わないと文字化けするから注意
そして読み込みテスト。
CSVインポートで「そんな社員いません」問題
出力されたCSVをインポートするとどうしても特定の人でエラーは発生します。
何のエラーよ?どこで発生したのよ?
調べてみると、知らない社員の情報を読み込もうとしているということ。
※この時点では従業員ごとにcsv作成したので人の特定は簡単
今回のシステムは社員番号をキーにしているので確認しても問題はない。
サポートに問い合わせると
なんてこった。RPAのテストでメモ帳でcsvファイル作ったのにサポート外だと?これだけのためにExcel立ち上げたくないし(RPA的に)
原因判明編
試行錯誤を繰り返した結果、原因を特定。
弊社の社員番号の一桁目はなんと"世紀"を表すという壮大な仕様。なので20世紀入社の人は一桁目が"0"になるのでした。これをダブルコーテーションで囲わないでcsv作ると桁が減って社員台帳の社員番号に該当しないってエラーになる。
原因がわかったので対策を立てる
第二回 BluePrism 試作品編
前項で書いた通り、csvを作成するのは「Utility - File Management - JP:ファイルにテキストを書き出す - 文字コード指定」を呼ぶだけ。
ここでダブルコーテーションで囲うオプションもないし… 作るか… 全データぐるぐる回して… いやそれはちょっと… と考えているうちにひらめいた
解決編
要はデータを全部ダブルコーテーションで囲えればいい。
ということで正規表現を使った変換をします
正規表現を使うには日商エレクトロニクスさんが公開されている日商エレクトロニクス標準アセットを使います。
その中で「NEO - 文字列」というオブジェクトを使用します。
正規表現: "(.*?)(,|\r?\n|\r)"
置換先 : """$1""$2"
これで一発変換。
あとは「Utility - File Management - JP::ファイルにテキストを書き出す - 文字コード指定」で書き出して終了。
無事にインポートできました。