-
C#에서 엑셀파일 읽어오기(불러오기)C# 2016. 4. 13. 01:13
※ 블로그를 이전하며 해당 내용을 개선하여 포스팅했습니다. (링크)
C#을 사용한 프로그램에서 엑셀파일을 읽어와 Data로 사용해야 할 경우가 있습니다.
먼저 참조파일이 필요합니다.
참조추가 -> COM -> Microsoft Excel 16.0 Object Library (여기서 16.0은 Excel의 버전입니다.)
(예. Microsoft Excel 13.0 Object.... 등등)
상단에 using 구문을 추가해야 합니다.
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;
먼저 엑셀파일에 접근해서 Data를 가져오는 함수입니다.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647public void ReadExcelData(string path){ // path는 Excel파일의 전체 경로입니다.// 예. D:\test\test.xslxExcel.Application excelApp = null;Excel.Workbook wb = null;Excel.Worksheet ws = null;try{excelApp = new Excel.Application();wb = excelApp.Workbooks.Open(path);// path 대신 문자열도 가능합니다// 예. Open(@"D:\test\test.xslx");ws = wb.Worksheets.get_Item(1) as Excel.Worksheet;// 첫번째 Worksheet를 선택합니다.Excel.Range rng = ws.UsedRange; // '여기'// 현재 Worksheet에서 사용된 셀 전체를 선택합니다.object[,] data = rng.Value;// 열들에 들어있는 Data를 배열 (One-based array)로 받아옵니다.for (int r = 1, i = 0; r <= data.GetLength(0); r++){for (int c = 1; c <= data.GetLength(1); c++){if (data[r, c] == null){continue;}// Data 빼오기// data[r, c] 는 excel의 (r, c) 셀 입니다.// data.GetLength(0)은 엑셀에서 사용되는 행의 수를 가져오는 것이고,// data.GetLength(1)은 엑셀에서 사용되는 열의 수를 가져오는 것입니다.// GetLength와 [ r, c] 의 순서를 바꿔서 사용할 수 있습니다.}}wb.Close(true);excelApp.Quit();}catch (Exception ex){throw ex;}finally{ReleaseExcelObject(ws);ReleaseExcelObject(wb);ReleaseExcelObject(excelApp);}}cs
여기서 사용하는 Excel 데이터를 Release해주는 함수입니다.
1234567891011121314151617181920static void ReleaseExcelObject(object obj){try{if (obj != null){Marshal.ReleaseComObject(obj);obj = null;}}catch (Exception ex){obj = null;throw ex;}finally{GC.Collect();}}cs
※ 참고
엑셀에서 한번이라도 수정을 했었던 셀은 사용된 것으로 인식이 되어
data 배열에 입력됩니다.
따라서 null을 따로 처리해주어야 합니다.
엑셀 워크시트 전체가 아닌 일부 필요한 영역만 선택하고 싶은 경우
ReadExcelData 함수의 15번째줄의 '여기' 부분을
Excel.Range rng = ws.Range[ws.Cells[시작 행, 시작 열], ws.Cells[끝 행, 끝 열]];
로 바꾸어 주시면 됩니다.
---------------------내용 추가----------------------------
Excel.Range rng = ws.Range["A2","D9"]; 와 같이
해당 셀의 주소값을 바로 넣어주어도 됩니다.
또는 ws.Range["B4"]; 와 같이 한 칸 만 설정할 수 있습니다.
※ 참고
셀 서식에서 숫자 형식으로 바꿀 경우 data는 double형이 되며,
기본적으로 입력되는 것들은 string형이 됩니다. (예. 기본 문자열, 핸드폰 번호 등)
ps.엑셀파일 저장하기에 관해서도 글을 쓰게 되었습니다.
'C#' 카테고리의 다른 글
C# 텍스트 파일 읽기 (한글 깨짐) (0) 2016.12.01 Visual Studio C# CS0051 오류 (0) 2016.05.17 C# 문자열과 16진수간 변환 (0) 2016.04.24 C# 정수형 자리수 맞추기 ( 앞에 0으로 채우기) (0) 2016.04.11 콘솔에서 비동기 입력 받기(예로 추첨 프로그램) (0) 2016.04.11 댓글