2025년, 코딩은 선택이 아닌 필수!

2025년 모든 학교에서 코딩이 시작 됩니다. 먼저 준비하는 사람만이 기술을 선도해 갑니다~

강의자료/C#

[C#] Excel 파일 다루기

원당컴1 2021. 2. 16. 23:00
목표

- 보고서 를 엑셀파일로 저장하는 방법 등에 대해 다루어 봅니다.

- 엑셀 파일을 읽어 보고 저장 하는 방법등을 배웁니다.

- DataGridView 사용법을 확인합니다.

 

 

컴포넌트 설명

- DataGridView :  테이블 형태의 데이터를 화면에 뿌려 주는데 DB와 바인딩해서 사용이 가능하며 개발자가 수동으로 갱신할 수 있다.(이번 프로젝트에서는 수동으로 갱신하는 방법을 활용해 본다.)

 

 

준비

-  Office / SharePoint Developmen 를 추가 설치 합니다.

- 참조관리자에서 Microsoft Excel 16.0 Object Libray/Microsoft Office 16.0 Object Libary 추가

 

 

폼구성

- panel : Dock - Top

- Button : 2개 - Excel읽기/ Excel저장

- DataViewGrid : Dock - Fill

- OpenFileDialog/SaveFileDialog

 

 

소스코드

 

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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
using Microsoft.Office.Interop.Excel;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace ExcelFileManager
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            openFileDialog1.Filter = "Excel(*.xlsx)|*.xlsx";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                ExcelFileLoading(openFileDialog1.FileName);
            }
        }
 
        private void ExcelFileLoading(string fileName)
        {
            dataGridView1.Columns.Clear();
            dataGridView1.Rows.Clear();
            dataGridView1.Refresh();
 
            Microsoft.Office.Interop.Excel.Application application = new Microsoft.Office.Interop.Excel.Application();
            Workbook workbook = application.Workbooks.Open(Filename: @fileName);
            Worksheet worksheet1 = workbook.Sheets[1];  //workbook.Worksheets.get_Item("sheet1");
            application.Visible = false;
            try
            {
                Range range = worksheet1.UsedRange; //모든 구간을 읽자
                for (int i = 1; i <= range.Columns.Count; i++)
                {
                    if((range.Cells[1, i] as Range).Value2==null)
                    {
                        dataGridView1.Columns.Add(i.ToString(), i.ToString());
                    }
                    else
                    {
                        dataGridView1.Columns.Add(i.ToString(), (range.Cells[1, i] as Range).Value2.ToString()); // (range.Cells[1, i] as Range).Value2.ToString());
 
                    }
                }
                String[] rowdata = new string[range.Columns.Count];
                for (int i = 2; i <= range.Rows.Count; ++i)
                {
 
                    for (int j = 1; j <= range.Columns.Count; ++j)
                    {
                        if((range.Cells[i, j] as Range).Value2 != null)
                            rowdata[j - 1= ((range.Cells[i, j] as Range).Value2.ToString() + " ");
                    }
                    dataGridView1.Rows.Add(rowdata);
                }
 
                workbook.Close();
                application.Quit();
            }
            finally
            {
                ReleaseObject(worksheet1);
                ReleaseObject(workbook);
                ReleaseObject(application);
            }
 
            
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            saveFileDialog1.Filter = "Excel(*.xlsx)|*.xlsx";
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                ExcelFileSave(saveFileDialog1.FileName);
            }
        }
 
        private void ExcelFileSave(string fileName)
        {
            Microsoft.Office.Interop.Excel.Application application = new Microsoft.Office.Interop.Excel.Application();
            Workbook workbook = application.Workbooks.Add(true);
            Worksheet worksheet1 = workbook.Sheets[1];
            application.Visible = false;
            try
            {
 
                int rowcnt = dataGridView1.RowCount;
                int colcnt = dataGridView1.ColumnCount;
 
                String[,] data = new string[rowcnt, colcnt];
 
                for (int i = 0; i < rowcnt; i++)
                {
                    for (int j = 0; j < colcnt; j++)
                    {
                        if (dataGridView1.Rows[i].Cells[j].Value != null)
                        {
                            worksheet1.Cells[i + 1, j + 1= dataGridView1.Rows[i].Cells[j].Value.ToString();
                        }
 
                    }
                }
                workbook.SaveAs(fileName);
                // Char Endchar = Convert.ToChar(Convert.ToInt32('A') + colcnt);
                // String EndStr = Endchar.ToString() + rowcnt.ToString(); //마지막 범위 위치 지정
                // worksheet1.get_Range()
 
                workbook.Close();
                application.Quit();
            }
            finally
            {
                ReleaseObject(worksheet1);
                ReleaseObject(workbook);
                ReleaseObject(application);
            }
            
        }
 
        private void ReleaseObject(Object obj)
        {
            try
            {
                if (obj != null)
                {
                    Marshal.ReleaseComObject(obj); // 액셀 객체 해제 
                    obj = null
                } 
            } catch(Exception ex) { 
                obj = null
                throw ex; 
            } finally { 
                GC.Collect(); // 가비지 수집 
            }
 
                
        }
    }
}
 
cs

 

ExcelFileManager.zip
0.26MB

 

동작

 

 

 

활용

- 엑셀파일을 제어하거나 보고서에서 엑셀파일로 내보내기 기능등에 활용

 

 

=====================================================

이 자료는 학생들과 특강시간에 만들어 보는 프로젝트입니다.

=====================================================

 

오늘도 최선을 다하는 우리 학생들을 응원합니다.

인천 서구 검단신도시 원당컴퓨터학원

 

사업자 정보 표시
원당컴퓨터학원 | 기희경 | 인천 서구 당하동 1028-2 장원프라자 502호 | 사업자 등록번호 : 301-96-83080 | TEL : 032-565-5497 | Mail : icon001@naver.com | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기