Creative Commons License

Microsoft .NET

닷넷!시작하기
닷넷! Ver 2.0~
닷넷!스킬업
웹개발
윈폼개발
실용모듈개발
Tip & Tech
하루 한 문법

Microsoft .NET 개발자들을 위한 공간입니다. 기초강의에서 부터 고급 기술 정보 및 팁등을 다루도록 하겠습니다.

.

윈폼개발

닷넷을 기반으로 한 윈도우 응용프로그램 개발 지식을 다룹니다. 비지니스 응용프로그램을 위한 닷넷 윈폼 응용프로그램은 아주 강력합니다

ListView 의 항목들을 Excel 파일로 저장하기

작성자 : 박종명
최초 작성일 : 2008-06-26 (목요일)
최종 수정일 : 2008-06-26 (목요일)
조회 수 : 5080

Objects Library 를 지원하는 모든 제품들은 COM을 통해 쉽게 해당 Object들을 사용할 수 있습니다
이번 글에서는 엑셀의 Obejcts Library를 참조하여 ListView내용을 엑셀파일로 자장하는프로그램을 만들어 볼 것입니다
 
소개
Objects Library 를 지원하는 모든 제품들은 COM을 통해 쉽게 해당 Object들을 사용할 수 있게된다.
이번 아티클에서는 엑셀의 Obejcts Library를 참조하여 ListView내용을 엑셀파일로 저장하는 프로그램을 만들어 볼 것이다.
 

작업진행

[
진행1] 해당 COM 을 프로젝트에 참조하기
-
아래 그림과 같이 엑셀의 Objects Library를 참조.
  
오피스의 버전에 따라 Object Library 이름이 다를 수 있다
  
저의 경우 오피스 2003입니다
  (
참고 : 오피스 2002의 경우 Microsoft Excel 10.0 Object Library 입니다)

  

 
  
  
[
진행2] ListView 에 항목설정하기
- 항목들을 디자인타임이나 하드코딩으로 추가.
   (
저는 참고로 아래와 같이 추가하였습니다.}

 
  

 

[진행3] 코딩

 

       //저장하기 Button의 이벤트 코드
       private void button1_Click(object sender, System.EventArgs e)

        {

            SaveDialogBoxOpen(this.listView1.Items);

        }

 

        private void SaveDialogBoxOpen(IList items)

        {

            if(items.Count <= 0)

            {

                MessageBox.Show("Excel파일로 저장할 항목이 없습니다");

                return;

            }

 

            this.saveFileDialog1.FileName = "test.xls";

            this.saveFileDialog1.Filter = "xls files (*.xls)|*.xls"  ;

            this.saveFileDialog1.FilterIndex = 1;

            this.saveFileDialog1.RestoreDirectory = true;                   

            

            if(this.saveFileDialog1.ShowDialog() == DialogResult.OK)

            {

                string fileName = this.saveFileDialog1.FileName;

                try

                {

                    this.SaveExcel(items,fileName);

                }

                catch(Exception ex)

                {

                    MessageBox.Show("파일 저장중 오류가 발생했습니다." + ex.Message + "\n다시 시도해 주십시요");

                }

 

            }           

        }

       //실제로 Excel개체로 작업하는 메서드

        private void SaveExcel(IList items ,string fileName)

        {           

            Excel.Application excel = new Excel.Application();          

            Excel.Workbook excelWorkbook;                                                           

            excel.Visible = true;                               

            excelWorkbook = excel.Workbooks.Add(true);

                    

            int columnIndex = 0;

            foreach(ColumnHeader header in this.listView1.Columns)

            {

                columnIndex++;

                excel.Cells[1,columnIndex] = header.Text;

            }

 

            int rowIndex = 1;       

            foreach(ListViewItem mainItem in items)

            {

                rowIndex++;

                columnIndex = 0;

                foreach(ListViewItem.ListViewSubItem item in mainItem.SubItems)

                {

                    columnIndex++;

                    excel.Cells[rowIndex,columnIndex] = item.Text;

                }

            }       

            

            excelWorkbook.SaveAs(fileName,Type.Missing , Type.Missing ,Type.Missing ,

                Type.Missing ,Type.Missing , Excel.XlSaveAsAccessMode.xlNoChange ,Type.Missing ,Type.Missing

                ,Type.Missing ,Type.Missing ,Type.Missing);      

                        

            excelWorkbook.Close(false , Type.Missing  , Type.Missing);

            excel.Quit();

        }

 

   
[
진행4] 설명


- 엑셀파일 핸들링의 진행 순서는 다음과 같다.


  -> Excel
의 개체생성

  -> Workbook 개체를 생성된 Excel개체의 Workbooks 컬렉스에 추가
  -> ListView
헤더값을 Cell에 추가

  -> ListView아이템값들을 Cell에 추가

  -> Workbook 닫기

  -> excel 빠져 나가기

 

  코드에서 excel.Cells[1,columnIndex] 부분은 엑셀의 [rowIndex,columnIndex] 파라메타를 가진다.
 
excel.Cells[1,3] 은 첫번째 row 3째 컬럼의 Cell을 가르키는 것이다.

 

  참고로, 다 저장한 후 엑셀파일을 닫고 싶지 않으면(사용자가 추가의 작업이 필요한 경우등

  맨 아래의,
   excelWorkbook.Close(false , Type.Missing  , Type.Missing);
   excel.Quit();
  
이부분을 삭제(주석).
 
정리
이상 ListView Items를 엑셀로 저장하는 방법에 대해 알아 보았습니다.
물론 원본이  ListView가 아니라 DataTable 위의 코드에서 수정할 부분은 그리 많지 않을 것입니다.
감사합니다.

 

 

 

이름
비밀번호
홈페이지
RJ <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요