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 위의 코드에서 수정할 부분은 그리 많지 않을 것입니다.
감사합니다.
출처 : http://www.mkexdev.net/Article/Content.aspx?parentCategoryID=1&categoryID=23&ID=278
'개발언어 > C#' 카테고리의 다른 글
[C#] 숫자 (금액) 을 한글로 변환 (0) | 2021.11.25 |
---|---|
[C#] Excel저장시 오류 해결 (0) | 2021.11.18 |
[C#] Thread에 파라미터 전달 (0) | 2021.11.18 |
[C#] yyyymmddhhmmss 문자열을 날짜포맷(DateTime)으로 변환하는 함수 (0) | 2021.11.17 |
[C#] DateTime 정리 (0) | 2021.11.15 |