none
리스트 뷰 데이터를 엑셀파일로 저장하기 RRS feed

  • 일반 토론

  • 저는 개인적으로 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을 참고하시면 됩니다.

    전체 프로젝트를 올리고 싶은데 프로젝트에 민감한(?)부분이 있어서 이 소스만 알려드립니다.

    그럼...

    2011년 11월 2일 수요일 오전 6:40

모든 응답

  • 감사합니다..^^ 잘 사용하겠습니다! ㅎ 확실이 알아두고 갑니다!

    Original Single Enterprise.Inc의 대표이사


    • 편집됨 MinSu Hong 2012년 3월 10일 토요일 오전 5:06
    2012년 3월 10일 토요일 오전 5:05
  • 감사합니다!

    2013년 3월 3일 일요일 오후 6:00
  • 안녕하세요.

    좋은정보 감사합니다.

    저는 그리드뷰와 서드파티(스프레드)를 주로쓰지만.. ^^;

    올려주신내용에 조금 보태자면, 참조추가후에 Imports Microsoft.Office.Interop 를 해주어야 합니다.

    그리고 배포시에 클라이언트 PC에 해당빌드버젼의 오피스가 깔려있지않다면,

    Interop.Excel.dll 을 bin 폴더에 카피해두고 다이렉트 참조한 후에,

    Interop.Excel.dll 을 같이 배포하면 됩니다.


    프로그램 개발에는 정답이 없다.

    2013년 3월 6일 수요일 오전 2:03