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 파일을 만들 수 없었습니다.
오류가 발생하는 이유는 현재 버전의 UiPath에서 Write CSV가 Shift-JIS를 완전히 지원하지 않기 때문인 것 같습니다. 가장 안정적인 해결 방법은 Invoke Code에서 StreamWriter와 Encoding.GetEncoding("shift_jis")를 사용하는 것입니다. CodePagesEncodingProvider를 등록하거나 UTF-8로 변환하는 등의 다른 우회 방법은 Windows-Legacy에서 안정성이 떨어집니다.
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
AI가 생성한 코드라 테스트하지 않았으니, 시도해 보시고 필요하다면 수정해 주세요.
또한 인수가 다음과 같은지 확인해 주세요. in_DataTable (In, System.Data.DataTable) 및 in_FilePath (In, String)
아마 System.Activites 패키지와 Excel.Activites 패키지의 종속성 문제로 발생한 것으로 보입니다. 따라서 CSV 쓰기 액티비티의 문제를 해결하려면 액티비티 패키지 버전을 변경해야 할 것 같습니다(EXCEL 버전을 올리거나 System 버전을 낮추는 방법).
우회 방법으로는 DataTable을 Output DataTable 액티비티로 일단 문자열로 출력한 다음, WriteTextFile 액티비티를 사용해 파일에 쓰는 방법이 유효할 수 있습니다.