저는 개인적으로 DB작업할때 리스트뷰를 많이 애용합니다. 데이터그리드뷰에 비해 범용성이 쪼금 떨어지지만 DB View에 관한 컨트롤로서는 아주 딱이죠.. 물론 개인적인 의견입니다.
실무에서 작업할때도 주로 리스트뷰로 많이 작업하는데 이번에는 리스트뷰에 표시되는 내용을 그대로 엑셀로 표시하여 엑셀파일로 저장하는 메서드를 알려드리겠습니다. 출처는 제가 테스트로 이용했던 블로그입니다.
먼저 엑셀 객체 라이브러리는 추가해야 합니다.
솔루선 탐색기에서 참조 추가를 선택해서 Com 탭에서 Microsoft Excel 11.0 Object Library를 선택하면 됩니다.(엑셀 2003경우엔 버전이 11.0이고, 2002버전은 10.0 이고, 2000은 9.0이다)
엑셀이나 오피스가 설치되지 않으면 안되고 오피스2007에서는 테스트 못했습니다...
이런식으로 꼭 추가 해야 합니다.
소스는 아주 간단합니다.
이 메서드에 있는 파라미터는 데이터를 저장할 리스트뷰와 엑셀파일로 저장할 파일이름입니다.
'리스트뷰내용을 엑셀파일로 저장한다.
Private Sub SaveExecl(ByVal list As ListView, ByVal ExcelFileName As String)
'1. 저장할 엑셀파일 설정
Dim FilePathName As String = ExcelFileName
'2. 엑셀 객체생성
Dim Excel As Excel.Application = New Excel.Application
Dim ExcelWorkBook As Excel.Workbook
'3.엑셀 객체 속성값 설정
Excel.Visible = True '엑셀 화면이 스크린에 표시
'Excel.Visible = False '엑셀 화면 비표시
ExcelWorkBook = Excel.Workbooks.Add(True)
Excel.Sheets("Sheet1").name = "리스트뷰내용표시"
'4.리스트뷰 설정
'리스트뷰 칼럼내용을 엑셀에 표시한다.
Dim ColumnIndex As Integer
Dim CHeader As ColumnHeader
For Each CHeader In list.Columns
ColumnIndex += 1
Excel.Cells(1, ColumnIndex) = CHeader.Text
Next
'리스트뷰 아이템 표시
Dim RowIndex As Integer = 1
Dim MainItem As ListViewItem
For Each MainItem In list.Items
RowIndex += 1
ColumnIndex = 0
'리스트뷰 서브아이템 표시
Dim SubItem As ListViewItem.ListViewSubItem
For Each SubItem In MainItem.SubItems
ColumnIndex += 1
Excel.Cells(RowIndex, ColumnIndex) = SubItem.Text
Next
Next
'5. 저장시 발생하는 예외처리
Try
With ExcelWorkBook
.SaveAs(FilePathName)
.Saved = True
.Close()
End With
ExcelWorkBook = Nothing
Excel.Quit()
Excel = Nothing
MessageBox.Show("저장 했습니다.")
Catch ex As Exception
MessageBox.Show("저장하는데 오류발생", ex.Message)
Finally
'시스템 자원 자동으로 회수
GC.Collect() '이 코드가 없으면 작업관리자에 Excel.exe 이 종료하지 않음
End Try
End Sub
이렇게 하면 신기하게(?)엑셀이 자동으로 실행되면서 자동으로 리스트뷰에 있는 데이터가 순식간에 엑셀에 표시되면서
save가 됩니다.
그리고 엑셀에 있는 Cell에 관한 설정은 MSDN을 참고하시면 됩니다.
전체 프로젝트를 올리고 싶은데 프로젝트에 민감한(?)부분이 있어서 이 소스만 알려드립니다.
그럼...
첫댓글 감사합니다
감사합니다