DataTable을 읽을 수 있는 텍스트 문자열로 변환
-
09-06-2019 - |
문제
이것은 약간 어리석은 면이 있을 수 있지만 DataTable의 내용(알 수 없는 열, 알 수 없는 내용)을 텍스트 이메일을 통해 보내야 합니다.기본 아이디어는 행과 열을 반복하고 .ToString()을 사용하여 모든 셀 내용을 StringBuilder로 출력하는 것입니다.
하지만 포맷은 큰 문제입니다.이것을 텍스트 형식으로 "읽을 수 있는" 모양으로 만드는 방법에 대한 팁/아이디어가 있습니까?
각 셀에 빈 공간을 "패딩"할 생각이지만 일부 셀을 여러 줄로 분할해야 하므로 StringBuilder 접근 방식이 약간 지저분해집니다(첫 번째 열의 두 번째 텍스트 줄이 첫 번째 열 뒤에 오기 때문입니다). 마지막 열의 텍스트 줄 등)
해결책
데이터 테이블을 HTML 테이블로 변환하고 HTML 메일을 보내는 것이 대안이 될까요?클라이언트가 지원한다면 수신 측에서는 훨씬 더 좋을 것입니다.
다른 팁
이것은 정말 끔찍한 해결책처럼 들리지만 다음과 같이 작동할 수도 있습니다.
DataTable 내용을 DataGrid/GridView(ASP.NET으로 가정)로 렌더링한 다음 이를 화면 스크랩합니다.
지저분해질 거라고 말했어요.
먼저 각 열의 최대 크기를 가져옵니다.이렇게 하면 우편번호가 포함된 varchar(255) 열이 너무 많은 공간을 차지하지 않습니다.
한 줄을 분할하는 대신 전체 테이블을 분할할 수도 있습니다.테이블의 오른쪽 부분 전체를 두 번째 스트링 빌더에 넣고 첫 번째 테이블 아래에 놓습니다.
수신자가 테이블을 스프레드시트로 가져올 수 있도록 쉼표로 구분된 텍스트를 생성하는 옵션을 사용자에게 제공할 수도 있습니다.
데이터 테이블을 반복하여 HTML 이메일로 보냅니다. 데이터 테이블에서 html 테이블 생성 및 이메일 본문으로 보내기.
이 작업을 위해 특별히 사용자 정의 포맷터를 작성하여 이 작업을 수행했습니다.코드의 길이는 약 120~130줄이므로 여기에 답변으로 게시해야 할지 모르겠습니다(주제에 .cs 파일을 첨부하는 기능이 있으면 좋을 것 같습니다!).
어쨌든, 이에 관심이 있는 사람이 있으면 알려주시면 코드를 제공하겠습니다.
형식을 잘 지정해야 합니까? 아니면 자동화된 시스템이 상대방의 메일 메시지를 수신하게 됩니까?후자의 경우 데이터 테이블의 .WriteXml() 메서드를 사용하세요.
다음과 같이 할 수 있습니다(VB인 경우):
Dim Str As String = ""
'Create File if doesn't exist
Dim FILE_NAME As String = "C:\temp\Custom.txt"
If System.IO.File.Exists(FILE_NAME) = False Then
System.IO.File.Create(FILE_NAME)
End If
Dim objWriter As System.IO.StreamWriter
Try
objWriter = New System.IO.StreamWriter(FILE_NAME)
Catch ex As System.IO.IOException
MsgBox("Please close the file: (C:\temp\Custom.txt) before proceeding" & vbCrLf & ex.Message.ToString, MsgBoxStyle.Exclamation)
objWriter = Nothing
Err = True
End Try
'I assume you know how to write to text file.
'Say my datagridview is named "dgrid"
Dim x,y as integer
For x = 0 to dgrid.rows.count -1
For y = 0 to dgrid.columns.count - 1
Str = dgrid.Rows(x).Cells(y).Values & " "
Next y
Next x
objWriter.Close()
자원.
아니면 생성할 수도 있습니다. CSV DataTable의 파일입니다.