본문으로 바로가기

C# DataTable 데이터 Export to 엑셀(Excel)파일 저장 ,쓰기로 파일 생성 하는 방법과 셀 서식 적용

c#에서 DataTable에 데이터를 담고 있을 때  엑셀로 Export 시켜야 할 경우가 있습니다. 

 소개해 드릴 소스에 엑셀 파일 저장까지 적용해보겠습니다.

버튼을 누르면 데이터테이블에 있는 데이터를 엑셀로 Export 시키는 소스 입니다. 

엑셀로 출력하는 부분은 문제가 없으나 문자 앞에 010 이 들어가면 0이 없어지고 10으로 변경되는 문제가 있습니다. 

엑셀로 export 시 셀 서식을 적용해서 텍스트로 변경해야 하는데요. 

C# DataTable 데이터 Export to 엑셀(Excel)파일 저장 ,쓰기로 파일 생성 하는 방법과 셀 서식 적용




버튼을 누르면 나오는 실행되는 이벤트 메소드 입니다. DataTable을 생성 후 데이터를 임시로 넣었습니다. 

데이터 중에는 age가 020이 들어있습니다. 잠시 기억해주세요.

DataTable을 생성 후 데이터



엑셀을 export 하기 위해서 dll을 참조해야 하는데요

Microsoft.Office.Interop.Excel.dll을 참조하시면 됩니다. 

using Excel = Microsoft.Office.Interop.Excel; 을 해서 별칭을 선언했습니다. 

1
using Excel = Microsoft.Office.Interop.Excel;
cs

using Excel = Microsoft.Office.Interop.Excel; 을 해서 별칭을 선언했습니다.



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으로 나옵니다. 

엑셀 서식을 텍스트로 변경해야 합니다.

 나이가 020 으로 입력했는데 20으



서식에 NumberFomat을 "@" 로 주면 텍스트 형식으로 서식이 지정됩니다. 

다만 정 PC에서 Coloums[0].NumberFormat 부분이 Object로 되서 오류가 발생되는 부분이 있습니다. 

1
      workSheet.Columns[3].NumberFormat = "@";
cs

NumberFomat을



이럴경우 Range로 지정해서 서식을 변경할 수 있습니다. 

1
2
3
 var rngCelStr = (Excel.Range)workSheet.Cells[3];
                var rng = rngCelStr.EntireColumn;
                rng.NumberFormat = "@";
cs

Range로 지정해서 서식을 변경



나이값이 020으로 나오는것을 확인할 수 있습니다.

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)파일 저장 ,쓰기로 파일 생성 하는 방법을 알아보았습니다.

반응형