PROGRAMMING WORKSHOP

VB.Net |
DataGridView+DataTable 에서 EXCEL과 CSV화일저장

VB.Net에 점점 흥미를 갖는 분들이 계셔서 다행이다
VB.Net에서 COM에서 하듯이 CreateObject나 GetObject을 실행하고
싶은데 어떻게 하였으면 좋겠냐는 질문이 있다
앞의 화일에서 하였던 메모리상의 DataTable의 내용을
CSV화일로 저장하고, Excel화일로 저장하는 것을 해보자
CSV화일은 Text화일과 같은 것이니까 그냥 텍스트화일저장하듯이
하면 되고 그냥 확장자만 .CSV로 바꿔주면 된다
하지만 Excel화일은 Excel프로그램에 접근하여야 한다
VSTO프로젝트로 프로젝트를 시작할때는 Excel의 Interop이
자동으로 참조되니까..별 손볼것이 없으나
VSTO템프릿을 사용하지 않는 프로젝트에서는 당연히 Excel Interop을
참조시켜야 한다



버전은 사용자의 환경에 맞추어야 할 것이나, 하위버전도 사용하기
위하여서는 하위버전을 참조시키는 것이 좋을 것이다

Imports XL = Microsoft.Office.Interop.Excel
Public Class Form1
...
...
...
End Class

위와 같이 선언부에 참조한 라이브러리의 네임스페이스를 선언하면
XL은 Microsoft.Office.Interop.Excel은 단축적으로 표현하는 셈이된다

Dim oApp As New XL.Application
Dim oBook As XL.Workbook = oApp.Workbooks.Add
Dim oSheet As XL.Worksheet = oBook.Worksheets(1)
Dim iX As Integer = 0
oSheet.Application.Visible = True
For Each DataRow In oTbl.Rows
    iX += 1
    oSheet.Cells(iX, 1).value = DataRow(1)
    oSheet.Cells(iX, 2).value = DataRow(2)

Next
oSheet.SaveAs(My.Computer.FileSystem.SpecialDirectories.Desktop & "\myData.xls")
oApp.Quit()

와 같이 VBA에서 엑셀 다루듯이 다루면 된다..
oTbl 즉 DataTable개체는 마치 엑셀의 범위나 개념이 마찬가지로 보면 된다

화일을 다루려면 System.IO도 좋겠지만..

Dim sCSVFileName As String = My.Computer.FileSystem.SpecialDirectories.Desktop & "\myCSV.csv"
If My.Computer.FileSystem.FileExists(sCSVFileName) Then
    My.Computer.FileSystem.DeleteFile(sCSVFileName)
End If
My.Computer.FileSystem.CopyFile("sampledata.txt", sCSVFileName)

와 같이 My 네임스페이스를 참조하는 것이 편리하다
My.Computer.FileSystem.FileExists(화일명)은 화일의 존재여부를 알아내고
My.Computer.FileSystem.DeleteFile(화일명)은 화일을 삭제하고
My.Computer.FileSystem.CopyFile(원본,복사본)으로 복사하여 저장한다
그냥 영어말 그대로 인것이다

엑셀은 라이브러리만 참조한후에는
VBA에서 갈고 딱은 실력 그대로 표현하면 된다
추가적 설명은 화일에 ..

***[LOG-IN]***