-
C#에서 엑셀파일 저장(쓰기)C# 2018. 3. 30. 11:30
※ 블로그를 이전하며 해당 내용을 개선하여 새로 포스팅했습니다. (링크)
C#에서 엑셀 파일을 읽어오는 법에 대해 글을 썼었습니다. ([C#] - C#에서 엑셀파일 읽어오기)
이번에는 C#에서 엑셀 파일을 저장하는 법, 쓰는 법에 대해 쓰려 합니다.
저장하는 방법은 읽는 방법과 유사합니다.
참조파일이 필요합니다.
참조추가 -> 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를 쓰는 함수입니다.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960private static void WriteExcelData(){Excel.Application excelApp = null;Excel.Workbook wb = null;Excel.Worksheet ws = null;try{excelApp = new Excel.Application();wb = excelApp.Workbooks.Open(ExcelPath);// 엑셀파일을 엽니다.// ExcelPath 대신 문자열도 가능합니다// 예. Open(@"D:\test\test.xlsx");ws = wb.Worksheets.get_Item(1) as Excel.Worksheet;// 첫번째 Worksheet를 선택합니다.Excel.Range rng = ws.Range[ws.Cells[1, 1], ws.Cells[row, column];// 해당 Worksheet에서 저장할 범위를 정합니다.// 지금은 저장할 행렬의 크기만큼 지정합니다.// 다른 예시 Excel.Range rng = ws.Range["B2", "G8"];object[,] data = new object[row, column];// 저장할 때 사용할 object 행렬for (int r = 0; r < row; r++){for (int c = 0; c < column; c++){// data[r , c] = Data[r, c] 저장할 데이터}}// for문이 아니더라도 object[,] 형으로 저장된다면 저장이 가능합니다.rng.Value = data;// data를 불러온 엑셀파일에 적용시킵니다. 아직 완료 Xif (path != null)// path는 새로 저장될 엑셀파일의 경로입니다.// 따로 지정해준다면, "다른이름으로 저장" 의 역할을 합니다.// 상대경로도 가능합니다. (예. "secondExcel.xlsx")wb.SaveCopyAs(path);else// 따로 저장하지 않는다면 지금 파일에 그대로 저장합니다.wb.Save();wb.Close();excelApp.Quit();}catch (Exception ex){throw ex;}finally{ReleaseExcelObject(ws);ReleaseExcelObject(wb);ReleaseExcelObject(excelApp);}}cs
여기서 사용하는 Excel 데이터를 Release해주는 함수입니다.
1234567891011121314151617181920private static void ReleaseExcelObject(object obj){try{if (obj != null){Marshal.ReleaseComObject(obj);obj = null;}}catch (Exception ex){obj = null;throw ex;}finally{GC.Collect();}}cs
다음은 DataTable형의 DataTable 속성으로 데이터를 갖는 제가 사용한 프로그램의 저장 예시 입니다.
더보기12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455private static void WriteExcelData(){Excel.Application excelApp = null;Excel.Workbook wb = null;Excel.Worksheet ws = null;try{excelApp = new Excel.Application();excelApp.DisplayAlerts = false;wb = excelApp.Workbooks.Open(ExcelPath);ws = wb.Worksheets.get_Item(1) as Excel.Worksheet;int row = DataTable.Rows.Count;int column = DataTable.Columns.Count;Excel.Range rng = ws.Range[ws.Cells[1, 1], ws.Cells[row + 1, column]];object[,] data = new object[row + 1, column];for (int i = 0; i < column; i++){data[0, i] = DataTable.Columns[i].ColumnName;}for (int r = 0; r < row; r++){for (int c = 0; c < column; c++){data[r + 1, c] = DataTable.Rows[r].ItemArray[c];}}rng.Value = data;if (path != null)wb.SaveCopyAs(path);elsewb.Save();wb.Close();excelApp.Quit();}catch (Exception ex){throw ex;}finally{ReleaseExcelObject(ws);ReleaseExcelObject(wb);ReleaseExcelObject(excelApp);}}cs 'C#' 카테고리의 다른 글
C# DateTime ToString Format (오전/오후 표시) (0) 2018.06.26 C# Enum 형식 array형으로 변환하기 (for문, foreach문 사용) (0) 2018.06.20 조합(Combination) 함수 (C#) (0) 2017.07.12 C# 높은 수준의 랜덤 숫자 (Good Random Number) (0) 2017.03.23 C# 함수 설명 추가하기 (0) 2016.12.30 댓글