Encoding:"Shift-JIS"でのcsvファイル作成

Encoding「Shift-JIS」でcsvファイルを作成したいです。
エラーの解消方法または、実行環境で実装する方法をご教示いただきたいです。
<実行環境>
・UiPath Studio 2024.10.1
・Windows-レガシ
・UiPath.System.Activities = 22.4.1
・UiPath.UIAutomation.Activities = 22.4.9
・UiPath.Excel.Activities = 2.8.6
・UiPath.Mail.Activities = 1.8.6

【発生しているエラー】
・「WriteCsvFile」でEncoding:"Shift-JIS"を設定し実行すると以下エラーが発生します。
<エラー内容>
CSV に書き込み: メソッドが見つかりません: ‘Void CsvHelper.CsvWriter..ctor(System.IO.TextWriter)’

・以下「参考URL」記載のメソッドを呼び出しを追加してみたのですが、エラーが発生し実装できませんでした。
参考URL:【UiPath】UiPathで「Shift-Jis」が使えない場合の対処法 #UiPath - Qiita
<エラー内容>
メソッドを呼び出し
式 “System.Text.CodePagesEncodingProvider.Instance” の処理中にコンパイル エラーが発生しました。 基本クラス ‘System.Text.EncodingProvider’ を含むアセンブリ ‘netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51’ への参照が必要です。参照をプロジェクトに追加してください。

・Invoke Codeでcsvファイル作成も試みましたが、「「shift_JIS」がEncodingのメンバーではありません」というエラーが発生し、csvファイルの作成ができませんでした。

I think the error happens because Write CSV in UiPath doesn’t fully support Shift-JIS in our version. The reliable solution is to use Invoke Code with StreamWriter and Encoding.GetEncoding("shift_jis"). Other workarounds (registering CodePagesEncodingProvider or converting UTF-8) are less stable in Windows-Legacy.

Cheers

Thank you for your response.
By the way, if I were to use Invoke Code, would it be possible for you to advise me on what kind of code I should write?

Hey @u_e try this

Dim enc = System.Text.Encoding.GetEncoding(932) ' Shift-JIS

Function EscapeCsv(v As String) As String
    If v Is Nothing Then Return ""
    If v.Contains(","c) OrElse v.Contains(""""c) OrElse v.Contains(vbCr) OrElse v.Contains(vbLf) Then
        v = v.Replace("""", """""")
        Return """" & v & """"
    End If
    Return v
End Function

Using sw As New System.IO.StreamWriter(in_FilePath, False, enc)
    ' Header
    sw.WriteLine(String.Join(",", in_DataTable.Columns.Cast(Of System.Data.DataColumn).Select(Function(c) EscapeCsv(c.ColumnName))))
    ' Rows
    For Each r As System.Data.DataRow In in_DataTable.Rows
        sw.WriteLine(String.Join(",", r.ItemArray.Select(Function(f) EscapeCsv(If(f, "").ToString()))))
    Next
End Using

It is not tested because it is AI generated please try and do the modification if needed
Also make sure these are the Arguments
in_DataTable (In, System.Data.DataTable) and in_FilePath (In, String)

Cheers

1 Like

こんにちは

このエラーはアクティビティパッケージの依存先バージョンのミスマッチによるものかと思います。

Excel.Activiites.Packageをもっと上位のバージョンに上げることはできませんでしょうか?

以下「参考URL」記載のメソッドを呼び出しを追加してみたのですが

これはWindpwsプロジェクトの話なので、Windowsレガシーでは無関係と思います。

ご回答ありがとうざいます。

Excel.Activiites.Packageをもっと上位のバージョンに上げることはできませんでしょうか?

開発環境の都合上、上位のバージョンにあげることが難しく、、、、
今のバージョンのままで作成を実施したいです。

おそらくSystem.Activites packageの依存先とExcel.Activites pacakgeの依存先の問題で生じていると思われますので、CSV書き込みアクティビティでの問題解消には、アクティビティパッケージのバージョン変更が必要と思われます(EXCELを上げるか、Systemを下げるか)

ワークアラウンドとしては、DataTableをOutput DataTableアクティビティで一旦文字列として出力し、WriteTextFileアクティビティで書き出す方法は有効かもしれません。

1 Like