본문 바로가기

Programming

데이터뷰(DataGridView) 의 내용을 탭으로분리된 파일로 저장하기

 Public Sub ExportData(ByVal Filename As String)
        Dim SD As New Windows.Forms.SaveFileDialog
        SD.InitialDirectory = My.Application.Info.DirectoryPath & "\XLSOUT"
        SD.FileName = Filename
        If System.IO.Directory.Exists(SD.InitialDirectory) = False Then System.IO.Directory.CreateDirectory(SD.InitialDirectory)
        SD.Filter = "탭으로 분리된 텍스트파일(*.TXT)|*.TXT"
        SD.FilterIndex = 0
        SD.RestoreDirectory = True
        If SD.ShowDialog <> Windows.Forms.DialogResult.OK Then Return

        Dim Fs As New System.IO.FileStream(SD.FileName, IO.FileMode.Create)
        Dim SW As New System.IO.StreamWriter(Fs, System.Text.Encoding.Default)
        Dim Strbuf As String = ""
        SW.WriteLine("====")
        SW.WriteLine("파일생성일자" & vbTab & Now.ToShortDateString & vbTab & Now.ToShortTimeString)
        SW.WriteLine("====")

        For Each DC As Windows.Forms.DataGridViewColumn In Me.Columns
            Strbuf = Strbuf & vbTab & DC.HeaderText
        Next
        SW.WriteLine(Strbuf)
        Strbuf = ""
        For Each DR As Windows.Forms.DataGridViewRow In Me.Rows
            For i As Integer = 0 To Me.Columns.Count - 1
                'MsgBox(Me.Columns(i).ValueType.ToString)
                'DR.Cells(0).FormattedValue
                Strbuf = Strbuf & vbTab & DR.Cells(i).FormattedValue
            Next
            SW.WriteLine(Strbuf)
            Strbuf = ""
        Next
        SW.Dispose()
        Fs.Dispose()
        MsgBox("저장완료" & vbCrLf & SD.FileName, MsgBoxStyle.Information, "확인")
    End Sub

========================================================================

FileName 은 저장할 파일명입니다.

다른방식으로도 많이 응용이 가능하겠지만 전 DataView 를 상속해서

재사용을 하구요 아래코드는 그 안의 코드입니다.

 

로직은 간단합니다. ^^ ..루프일 뿐입니다.

 

CSV파일도 가능하겠죠?vbtab 을 "," 로 바꾸면되니까요

근데 CSV 파일은 내용자체가 , 가 있으면 열이 틀어진다는 단점이 있더군요

^^