[C#] Excel 파일 다루기

2021. 2. 16. 23:00 from 강의실/C#
반응형
목표

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

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

- 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 | 사이버몰의 이용약관 바로가기
Posted by 파아란기쁨 트랙백 0 : 댓글 3

댓글을 달아 주세요

  1. addr | edit/del | reply 空空(공공) 2021.02.17 06:25 신고

    엑셀 파일 다루는 방법이로군요
    바람불고 차가운 날씨입니다
    건강 유의 하시길..

  2. addr | edit/del | reply 핑구야날자 2021.02.17 06:47

    데이터를 엑셀로 전환하는 경우가 종종 필요한데 유용하겠어요

  3. addr | edit/del | reply 휴식같은 친구 2021.02.17 11:24 신고

    시샾에서 엑셀파일 컨트롤도 가능하군요.