6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【UiPath】CSVファイルを出力する(Bom無し・改行コードLF等)

Last updated at Posted at 2021-07-27

はじめに

この投稿は、RPAツール「UiPath」の 実装例 の記事です。

UiPathのコミュニティ「UiPath Friends」が企画する「UiPathブログ発信チャレンジ2021サマー」の 27日目の投稿でもあります。

企画の内容は こちら 。カレンダーのURLは こちら です。

標準アクティビティでCSVファイルを作成すると

UiPathでCSVファイルを作成する場合は、通常「CSVに書き込み(WriteCSV)」アクティビティ を使用すると思います。

このアクティビティでは以下のように「エンコード/ヘッダー追加/区切り文字」オプションを指定してCSVファイルを作成することが出来ます。

image.png

ここで問題が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に設定した様子
image.png

InvokeCodeの引数
image.png
実際に実行して、作成されたファイルを見てみると、以下のように、改行コードは「LF」で「BOM無し」で、値は「ダブルクォーテーション」で区切られています。
image.png
image.png

終わりに

いかがでしたでしょうか?実装の参考になれば幸いです。
この記事が参考になったら、 LGTMをお願いします。閲覧ありがとうございました。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?