はじめに
この投稿は、RPAツール「UiPath」の 実装例 の記事です。
UiPathのコミュニティ「UiPath Friends」が企画する「UiPathブログ発信チャレンジ2021サマー」の 27日目の投稿でもあります。
企画の内容は こちら 。カレンダーのURLは こちら です。
標準アクティビティでCSVファイルを作成すると
UiPathでCSVファイルを作成する場合は、通常「CSVに書き込み(WriteCSV)」アクティビティ を使用すると思います。
このアクティビティでは以下のように「エンコード/ヘッダー追加/区切り文字」オプションを指定してCSVファイルを作成することが出来ます。
ここで問題が3つ発生します。
問題1)値をダブルクォーテーションで囲めない
問題2)改行コードがCrlf固定で変更できない
問題3)Bom付きファイルになってしまう
1番目は「値として、カンマが入る可能性がある文字列」を扱う際に、使用したい内容です。(ダブルクォーテーションで囲めば、カンマは区切り文字にならない)
2番目と3番目は特に「Linux系のシステム」にCSVファイルを取り込む際には必要になることがあります。
残念ながら、上記の問題は標準アクティビティでは、現状解決できません。
InvokeCodeでCSVファイルを作成する
上記の問題は、標準アクティビティではなく「.NET」で対応すれば解決できます。
具体的には以下のようなコードを作成し、実行します。
'// InvokeCodeに書く内容
Console.WriteLine(Datetime.Now.ToString & " [CSV出力] start " & filePath)
'Dim sw As New System.IO.StreamWriter(filePath, False, System.Text.Encoding.UTF8)'// BomありUTF8
Dim sw As New System.IO.StreamWriter(filePath, False) '// BomなしUTF8
Dim wk As String
'// ヘッダー行の出力
For i As Integer = 0 To dt_Output.Columns.Count - 1
wk = dt_Output.Columns(i).ColumnName
If dt_Output.Columns.Count-1 > i Then
wk = wk & ","c
End If
sw.Write(wk)
Next
'sw.Write(Environment.NewLine)
sw.Write(ControlChars.Lf) '// 改行コード:LF指定
'// データ行の出力
For Each row As datarow In dt_Output.Rows
For i As Integer = 0 To dt_Output.Columns.Count - 1
'// ダブルクォーテーションをシングルクォーテーションに変換(エスケープ)し
wk = row(dt_Output.Columns(i).ColumnName).ToString.Replace(Chr(34), "'")
'// ダブルクォーテーション(Chr(34))で囲む
wk = Chr(34) & wk & Chr(34)
If dt_Output.Columns.Count-1 > i Then
wk = wk & ","c
End If
sw.Write(wk)
Next
'sw.Write(Environment.NewLine)
sw.Write(ControlChars.Lf) '// 改行コード:LF指定
Next
sw.Close
sw = Nothing
Console.WriteLine(Datetime.Now.ToString & " [CSV出力] end")
InvokeCodeの引数
実際に実行して、作成されたファイルを見てみると、以下のように、改行コードは「LF」で「BOM無し」で、値は「ダブルクォーテーション」で区切られています。
終わりに
いかがでしたでしょうか?実装の参考になれば幸いです。
この記事が参考になったら、 LGTMをお願いします。閲覧ありがとうございました。