C# DataTable 데이터 Export to 엑셀(Excel)파일 저장 ,쓰기로 파일 생성 하는 방법과 셀 서식 적용
c#에서 DataTable에 데이터를 담고 있을 때 엑셀로 Export 시켜야 할 경우가 있습니다.
소개해 드릴 소스에 엑셀 파일 저장까지 적용해보겠습니다.
버튼을 누르면 데이터테이블에 있는 데이터를 엑셀로 Export 시키는 소스 입니다.
엑셀로 출력하는 부분은 문제가 없으나 문자 앞에 010 이 들어가면 0이 없어지고 10으로 변경되는 문제가 있습니다.
엑셀로 export 시 셀 서식을 적용해서 텍스트로 변경해야 하는데요.
버튼을 누르면 나오는 실행되는 이벤트 메소드 입니다. DataTable을 생성 후 데이터를 임시로 넣었습니다.
데이터 중에는 age가 020이 들어있습니다. 잠시 기억해주세요.
엑셀을 export 하기 위해서 dll을 참조해야 하는데요
Microsoft.Office.Interop.Excel.dll을 참조하시면 됩니다.
using Excel = Microsoft.Office.Interop.Excel; 을 해서 별칭을 선언했습니다.
1 | using Excel = Microsoft.Office.Interop.Excel; | cs |
path 로 저장할 파일위치와 파일명을 지정했습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | private void SatExportToExcel(System.Data.DataTable ds) { //엑셀 저장 경로 string path = @"C:\temp\excel_test.xlsx"; try { var excelApp = new Excel.Application(); excelApp.Workbooks.Add(); Excel._Worksheet workSheet = (Excel._Worksheet)excelApp.ActiveSheet; for (var i = 0; i < ds.Columns.Count; i++) { workSheet.Cells[1, i + 1] = ds.Columns[i].ColumnName; } for (var i = 0; i < ds.Rows.Count; i++) { for (var j = 0; j < ds.Columns.Count; j++) { workSheet.Cells[i + 2, j + 1] = ds.Rows[i][j]; } } if (File.Exists(path)) { File.Delete(path); } workSheet.SaveAs(path); excelApp.Quit(); } catch (Exception ex) { } } | cs |
엑셀로 export 해서 파일로 저장되었습니다. 엑셀 파일을 열어보니 한글도 이상없이 잘 나오네요
다만 나이가 020 으로 입력했는데 20으로 나옵니다.
엑셀 서식을 텍스트로 변경해야 합니다.
서식에 NumberFomat을 "@" 로 주면 텍스트 형식으로 서식이 지정됩니다.
다만 정 PC에서 Coloums[0].NumberFormat 부분이 Object로 되서 오류가 발생되는 부분이 있습니다.
1 | workSheet.Columns[3].NumberFormat = "@"; | cs |
이럴경우 Range로 지정해서 서식을 변경할 수 있습니다.
1 2 3 | var rngCelStr = (Excel.Range)workSheet.Cells[3]; var rng = rngCelStr.EntireColumn; rng.NumberFormat = "@"; | cs |
나이값이 020으로 나오는것을 확인할 수 있습니다.
전체 소스 입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; using Excel = Microsoft.Office.Interop.Excel; namespace ezHIE.HIE.XAVE.TEST { /// <summary> /// Window3.xaml에 대한 상호 작용 논리 /// </summary> public partial class Window3 : System.Windows.Window { public Window3() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { System.Data.DataTable dt = new System.Data.DataTable(); dt.Columns.Add("id"); dt.Columns.Add("name"); dt.Columns.Add("age"); dt.Columns.Add("hp"); DataRow dr = dt.NewRow(); DataRow dr1 = dt.NewRow(); DataRow dr2 = dt.NewRow(); dr["id"] = "id_no1"; dr["name"] = "김이중"; dr["age"] = "020"; dr["hp"] = "010"; dt.Rows.Add(dr); dr1["id"] = "myid"; dr1["name"] = "good man"; dr1["age"] = "31"; dr1["hp"] = "010-4567-1234"; dt.Rows.Add(dr1); dr2["id"] = "deost"; dr2["name"] = "김둘리"; dr2["age"] = "25"; dr2["hp"] = "010-0000-0000"; dt.Rows.Add(dr2); SatExportToExcel(dt); } private void SatExportToExcel(System.Data.DataTable ds) { //엑셀 저장 경로 string path = @"C:\temp\excel_test.xlsx"; try { var excelApp = new Excel.Application(); excelApp.Workbooks.Add(); Excel._Worksheet workSheet = (Excel._Worksheet)excelApp.ActiveSheet; #region 서식변경 /* workSheet.Columns[3].NumberFormat = "@"; */ var rngCelStr = (Excel.Range)workSheet.Cells[3]; var rng = rngCelStr.EntireColumn; rng.NumberFormat = "@"; #endregion for (var i = 0; i < ds.Columns.Count; i++) { workSheet.Cells[1, i + 1] = ds.Columns[i].ColumnName; } for (var i = 0; i < ds.Rows.Count; i++) { for (var j = 0; j < ds.Columns.Count; j++) { workSheet.Cells[i + 2, j + 1] = ds.Rows[i][j]; } } if (File.Exists(path)) { File.Delete(path); } workSheet.SaveAs(path); excelApp.Quit(); } catch (Exception ex) { } } } } | cs |
이상 C# DataTable 데이터 Export to 엑셀(Excel)파일 저장 ,쓰기로 파일 생성 하는 방법을 알아보았습니다.