프로그램에서 엑셀 파일을 직접적으로 읽어서 화면에 뿌려주어야 할 경우가 있습니다.
엑셀을 읽고 쓰기 위한 패키지인 Microsoft.Office.Interp.Excel 이용한 연동 방법을 설명하고자 합니다.
Microsoft.Office.Interp.Excel 패키지 다운 받기
프로젝트를 생성한 후 [ 솔루션 탐색기 ]에서 [ 참조 ]에 오른쪽 클릭 후 [ NuGet 패키지 관리.. ]를 선택합니다.
설치된 패키지 [ nuget.org ] 선택 후 우측 검색에서 " Microsoft.Office.Interop.Excel "을 입력하면 엑셀 관련 패키지 리스트가 나타납니다.
" Microsoft.Office.Interop.Excel " 중 글자 일부 "Excel"만 검색하여도 관련된 패키지를 찾을 수 있습니다.
리스트가 검색되면 " Microsoft.Office.Interop.Excel "항목의 [ 설치 ]를 눌러 줍니다.
엑셀 패키지가 다운로드가 완료되면 "참조" 항목에 위의 패키지가 다운된 것을 확인할 수 있습니다.
이제 엑셀 파일을 읽을 프로그램 준비가 되었습니다.
엑셀 파일 준비
test.xls파일에 아래와 같이 Sheet를 추가하고 내용을 입력하였습니다.
화면 구성
엑셀 파일은 프로그램 실행 경로에 넣어서 별도의 파일 열기 버튼은 추가하지 않고 [ 초기화 ]와 [ 읽기 ] 버튼을 추가하였습니다.
설명
엑셀 패키지를 using에 추가합니다.
using Excel = Microsoft.Office.Interop.Excel;
초기화 버튼의 경우 화면을 지우는 역할만 하므로 [ 읽기 버튼 ]의 내용을 아래와 같이 작성합니다.
private void btnRead_Click(object sender, EventArgs e)
{
string fileName = string.Format(@"{0}\test.xlsx", Application.StartupPath); //파일 경로
ReadExcelData(fileName); // 엑셀파일 읽기
}
먼저 엑셀 객체 삭제 함수를 작성합니다.
void ReleaseObject(object obj)
{
try
{
if (obj != null)
{
// 객체 메모리 해제
Marshal.ReleaseComObject(obj);
obj = null;
}
}
catch (Exception ex)
{
obj = null;
throw ex;
}
finally
{
GC.Collect(); // 가비지 수집
}
}
엑셀 읽기는 각각의 시트를 반복 확인하며 데이터를 리스트에 추가한 후 리스트 뷰에 뿌려주는 코드로 작성하였습니다.
void ReadExcelData(string fileExcel)
{
listBox1.Items.Clear();
List<string> buff = new List<string>();
if (File.Exists(fileExcel) == false)
{
return;
}
Excel.Application excelApp = null;
Excel.Workbook workBook = null;
try
{
excelApp = new Excel.Application(); // 엑셀 어플리케이션 생성
workBook = excelApp.Workbooks.Open(fileExcel,
0,
true,
5,
"",
"",
true,
Excel.XlPlatform.xlWindows,
"\t",
false,
false,
0,
true,
1,
0);
// Sheet항목들을 돌아가면서 내용을 확인
foreach (Excel.Worksheet workSheet in workBook.Worksheets)
{
buff.Add("");
buff.Add(workSheet.Name); // 표시용 데이터 추가
Excel.Range range = workSheet.UsedRange; // 사용중인 셀 범위를 가져오기
// 가져온 행(row) 만큼 반복
for (int row = 1; row <= range.Rows.Count; row++)
{
List<string> lstCell = new List<string>();
// 가져온 열(row) 만큼 반복
for (int column = 1; column <= range.Columns.Count; column++)
{
object obj = (range.Cells[row, column] as Excel.Range).Value2;
string str = obj.ToString(); // 셀 데이터 가져옴
lstCell.Add(str); // 리스트에 할당
}
buff.Add(string.Join(",", lstCell.ToArray())); // 표시용 데이터 추가
}
}
object missing = Type.Missing;
object noSave = false;
workBook.Close(noSave, missing, missing); // 엑셀 웨크북 종료
excelApp.Quit(); // 엑셀 어플리케이션 종료
}
finally
{
ReleaseObject(workBook);
ReleaseObject(excelApp);
}
listBox1.Items.AddRange(buff.ToArray());
}
실행 결과
각각의 시트 1~ 4를 반복하며 데이터가 들어 있는 부분을 추출하는 결과를 확인할 수 있습니다.
데이터 그리드에서 읽고 쓰기(고속 방식)
고속으로 읽고 쓰는 방법이 추가 되었습니다.
2022.11.02 - [프로그래밍/C Sharp] - [ C# ] 데이터 그리드 엑셀로 읽고 쓰기(고속 방식)
'프로그래밍 > C Sharp' 카테고리의 다른 글
[ C# ] ini 파일 읽기 및 쓰기 쉽게 쓸수 있는 클래스 공유 (0) | 2021.11.09 |
---|---|
[ C# ] 제브라 프린터 인쇄 미리보기 프로그램 제작 (0) | 2021.11.09 |
[ C# ] 허니웰 스케너 시리얼 통신으로 On/Off 하기 (1) | 2021.11.08 |
[ C# ] 오므론 RFID V608S TCP 통신 하기 (0) | 2021.11.08 |
[ C# ] 배열 생성시 초기값 넣기 (0) | 2021.11.08 |
댓글